2017-06-13 6 views
1

Ich habe 3 Tabellen: Bestellungen, Produkte und Lieferanten, die miteinander verwandt sind.Abfrage 3 Tabellen mit Filtern auf sie

Ich möchte die Bestellungen, die Produkte aus Bestellungen und für jedes Produkt die Produktlieferanten auflisten.

Mein Problem ist, wenn ich einen Filter auf Lieferanten anwende, wenn die Rückkehr 0 ist, möchte ich nicht das Produkt auflisten, das keine Lieferanten nach der Filterung haben und dasselbe, das ich für die Aufträge wünsche, die keine Produkte haben, um sie nicht anzuzeigen.

Meine Tabellen Strukturen sind dies:

OrderId | OrderName | OrderPrice | OrderStatus 
ProductId | orderIdRef | ProductName | ProductPrice 
SupplierId | productIdRef | SupplierName | SupplierPrice 

Thank you!

+0

was hast du bisher gemacht? zeigen Sie Ihre Abfrage – dbajtr

+0

Ihre Datenstruktur ist nicht klar .. bitte aktualisieren Sie Ihre Frage ein klares (Tabelle related) Struc eine ordnungsgemäße Daten Beispiel, und das erwartete Ergebnis – scaisEdge

+1

Erweitern Sie die DB sowie Beispiel-Dataset mit geeigneten DDL. – voidpro

Antwort

0

Wenn ich Sie richtig verstanden habe, dann wollen Sie eine Liste aller Bestellungen, die Produkte gegen sie haben, die ihrerseits Lieferanten gegen sie nach der Filterung haben. Ein einfacher Join würde Ihr Problem lösen.

WITH order_set AS 
    (SELECT 1 orderid, 'O1' ordername, 2000 orderprice, 'Open' orderstatus 
     FROM DUAL 
     UNION 
     SELECT 2 orderid, 'O2' ordername, 4000 orderprice, 'Closed' orderstatus 
     FROM DUAL), 
    prod_set AS 
    (SELECT '11' productid, '1' orderidref, 'P1' productname, 
      10 productprice 
     FROM DUAL 
     UNION 
     SELECT '12' productid, '1' orderidref, 'P2' productname, 
      10 productprice 
     FROM DUAL), 
    supp_set AS 
    (SELECT '111' supplierid, '11' productidref, 'S1' suppliername, 
      100 supplierprice 
     FROM DUAL 
     UNION 
     SELECT '112' supplierid, '11' productidref, 'S2' suppliername, 
      200 supplierprice 
     FROM DUAL) 
SELECT * 
    FROM order_set JOIN prod_set ON (orderid = orderidref) 
     JOIN supp_set ON (productid = productidref) 
WHERE filter_condition; 
+0

Hey, danke für deine Antwort, ich werde es testen und zurückkommen. – Alex1231