2016-08-25 12 views
1

Ich habe vier Tabellen: Karte, Projekt, Test, Instanz. Eine Instanz ist einem Test zugeordnet und ein Test ist einem Projekt zugeordnet. Die drei Tabellen Projekt, Test und Instanz haben alle eine map_id-Spalte (die null sein kann).Auswahl eines Wertes aus einer von drei Tabellen

Ich möchte einen 'Instanz' Eintrag mit einer map_id aktualisieren. Diese map_id sollte zuerst aus der map_id des Tests kommen. Wenn das null ist, dann benutze die map_id des Projekts.

Ich kann dies mit Code und mehr als einer SQL-Abfrage; Gibt es eine Möglichkeit, dies in einer einzigen Update-Abfrage zu tun?

Wenn nicht, werde ich wahrscheinlich dies in einem neuen Eintrag Trigger tun, aber ich würde es vorziehen, dies in einer einzigen Update-Abfrage nach der Tat tun.

Schema:

map 
+map_id 

project 
+project_id 
+map_id 

test 
+test_id 
+project_id 
+map_id 

instance 
+instance_id 
+test_id 
+map_id 

Antwort

1

können Sie verwenden beitreten und 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); 

schließlich hinzufügen, wo zum Filtern

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; 
Verwandte Themen