2016-08-25 49 views
1

我有四个表格:地图,项目,测试,实例。 实例与测试关联,并且测试与项目关联。 三个表格:项目,测试和实例,都有一个map_id列(可以为null)。从三个表格之一中选择一个值

我想用map_id更新'实例'条目。这个map_id应该首先来自测试的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 

回答

1

您可以使用加入和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; 
相关问题