2016-08-25 51 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; 
相關問題