mysql - 仅当在其他表中找到某个值时才更新字段
问题描述
我被困在以下问题上:我的数据库中有两个表。一个包含父元素,一个包含子元素。这个结构是给定的,不能改变。我现在必须为每个孩子更新一个字段。该字段可以包含 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 很陌生,所以我很困在这里。有人可以帮我吗?
解决方案
如果 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 中使用单引号、双引号和反引号
推荐阅读
- android - Kotlin 中的 ServerValue.TIMESTAMP 火库
- excel - Excel VBA获取时差
- compare - Amazon Rekognition 比较照片访问被拒绝异常
- tensorflow - 在带有 GPU 的 armv8 设备上运行我的 tensorflow 代码后崩溃
- phpstorm - WebStorm - 在“到处搜索”(双班)中点击返回/输入不会打开选定的文件
- python - PyQt5 - 如何识别按下了哪个按钮
- c# - WPF - 如何防止 DataTemplate 中的 AutomationId 重复
- angular - Object.keys(object).map() 不返回键
- javascript - NuxtJS| 在头组件中加载组件
- c# - HTTP 请求失败 - 发送请求时出错