2017-01-16 4 views
-2

Ich muss 3 Tabellen beitreten. Sie enthaltenSQL Joining 3 Tabellen für mehrere Kriterien

Tabelle A - Order_ID, Product_ID, Menge

Tabelle B - Order_ID, TRANSACTION_ID

Tabelle C - TRANSACTION_ID, Product_ID, Product_price

Als ich ihnen anschließen möchten:

LEFT JOIN table_B b on b.order_id = a.order_ID 

LEFT JOIN table_C on c.product_id = a.product_ID AND c.transaction_ID = b.transaction_ID 

Weil Tabelle C ist Verbunden mit 2 Tabellen erzeugt es Null-Datensätze, falls es mit Transaktions-ID übereinstimmt, ohne die Produkt-ID zu erfüllen. Und wenn ich die Menge summiere, ist es aus. Was ist der einfachste Weg, dies zu lösen?

+2

Bitte fügen Sie einige Daten, vollständige Abfragen, tatsächliche Ausgabe und erwartete Ausgabe. – shmosel

+1

Was ist der Unterschied zwischen einer Bestellung und einer Transaktion? Es scheint seltsam, dass ein Produkt in beiden erscheinen könnte? – Strawberry

Antwort

0

Für Ihr unmittelbares Problem könnten Sie tun:

select sum(case when b.order_id is not null and c.product_id is not null 
       then a.qty 
      end) 
from a left join 
    b 
    on b.order_id = a.order_ID left join 
    c 
    on c.product_id = a.product_ID and 
     c.transaction_ID = b.transaction_ID; 

Sie ein sehr seltsames Datenmodell hat. Sollte die Menge nicht mit der Transaktion oder dem Produktdatensatz übereinstimmen? In jedem Fall sollte case die spezifische Frage lösen, die Sie gestellt haben.

+0

Hallo Mann, danke für die Antwort. Eigentlich habe ich die Frage vereinfacht, da es sich um eine Abfrage handelt, die Daten aus 7 Tabellen kombiniert, aber in jedem Fall hat man es geschafft, dies mit zusätzlichen Auswahl- und Link-Joins zu tun. –