2016-07-27 21 views
0

Ich habe 3 Tabellen mit diesen Mock-Daten zu verweisenFähigkeit, ohne zu verlieren jede Tabelle

Item *id, name* 
1, coke 
2, fanta 
3, juice 

Branch *id, name* 
1, store 
2, warehouse 
3, shop 

BranchItem *item_id, branch_id, qty* 
1, 1, 100 
1, 2, 30 
2, 2, 10 

ich für einen Artikel (Koks zum Beispiel) abfragen mag und erhält ihre Menge in allen Bereichen (auch die diejenigen es nicht in existiert, NULL für Menge Spalte) haben

wie haben diese sollten So sollte das Ergebnis aussehen

1, coke, store, 100 

1, coke, warehouse, 30 

1, coke, shop, NULL 

ich eine Abfrage, die ca n tue dies, aber aufgrund von Alias-Tabellen verliere ich die Fähigkeit, auf die Spalte der Ergebnistabelle zu verweisen. Die Analyse des Ergebnisses wird in einem ORM-Objekt durchgeführt, die vorzugsweise nicht

Die Abfrage neu geschrieben werden sollen, ich habe

Select * from item left join (select * from branch left join (select * from branchitem where item_id = 1) branchitem on branch.id = branchitem.branch_id) JOINEDNAME on true where item.id = 1; 

Meine Frage ist, ich Elias will die Verknüpfung von Zweig und Brunch Artikeln nicht weil ich die Fähigkeit verliere, auf sie im ORM getrennt zu verweisen. Wie kann diese Abfrage neu geschrieben werden, damit die Tabellen ihre Namen behalten?

Antwort

1

Sie brauchen keine Unterabfragen verwenden:

SELECT Item.id, 
     Item.name, 
     Branch.name, 
     BranchItem.qty 
FROM Item 
CROSS JOIN Branch 
LEFT JOIN BranchItem ON Item.id = BranchItem.item_id 
        AND Branch.id = BranchItem.branch_id 
WHERE Item.id = 1; -- or put it into the branch join