首页 > 解决方案 > 仅当在其他表中找到某个值时才更新字段

问题描述

我被困在以下问题上:我的数据库中有两个表。一个包含父元素,一个包含子元素。这个结构是给定的,不能改变。我现在必须为每个孩子更新一个字段。该字段可以包含 0 或 1,但不能为 NULL。默认值为0。如果父母持有某种状态,我想将子类别中的字段更新为1。到目前为止我已经尝试过:

UPDATE  'children' AS 'child'
    SET  'foo' = (
        SELECT 1
        FROM 'parents' AS 'parent'
        WHERE 'parent'.'type' = "bar" AND 'parent'.'id' = 'child'.'fk_parents_id'
    );

这似乎对我不起作用,因为我收到一条错误消息,指出foo不能为空。我对 SQL 很陌生,所以我很困在这里。有人可以帮我吗?

标签: mysqlmariadb

解决方案


如果 foo 不能为 NULL。所以你必须测试它是否得到结果并设置另一个值

UPDATE  `children` AS `child`
    SET  `foo` = IF(
        EXISTS(SELECT 1
        FROM `parents` AS `parent`
        WHERE `parent`.`type` = "bar" AND `parent`.`id` = `child`.`fk_parents_id`) 
    ,0, 1);
        

永远不要对只给出错误的表或列名使用单引号,请参阅何时在 MySQL 中使用单引号、双引号和反引号


推荐阅读