从三个表中的一个中选择一个值

时间:2016-08-25 18:26:00

标签: mysql sql

我有四个表: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

2 个答案:

答案 0 :(得分:1)

您可以在SQL中使用if-else staments,例如http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html(MsSQL和Oracle可能略有不同) 另一方面,这可能会使您的代码难以调试。

答案 1 :(得分:1)

您可以使用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);

最终添加过滤的位置

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;