我有四个表:map、project、test、instance。 实例与测试相关联,而测试与项目相关联。 project、test、instance这三个表都有一个map_id列(可以为null)。
我想用 map_id 更新“实例”条目。这个map_id首先应该来自test的map_id;如果为 null,则使用项目的 map_id。
我可以用代码和多个 SQL 查询来做到这一点;有没有办法在单个更新查询中执行此操作?
如果没有,我可能会在一个新的入口触发器中执行此操作,但我更愿意在事后的单个更新查询中执行此操作。
架构:
map
+map_id
project
+project_id
+map_id
test
+test_id
+project_id
+map_id
instance
+instance_id
+test_id
+map_id
最佳答案
你可以使用 join 和 ifnull
update instance
inner join test on instance.test_id = test.test_id
inner join project on test.project_id = project.project_id
set instance.map_id = ifnull(test.map_id, project.map_id);
最后添加where进行过滤
update instance
inner join test on instance.test_id = test.test_id
inner join project on test.project_id = project.project_id
set instance.map_id = ifnull(test.map_id, project.map_id)
where instance.instance_id = your_value;
关于mysql - 从三个表中选择一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39152352/