2017-06-13 121 views
1

我有3個表格:訂單,產品和供應商彼此相關。查詢3個表上有過濾器

我想列出訂單,訂單中的產品和每個產品的產品供應商。

我的問題是當我在供應商上應用過濾器時,如果返回值爲0,我不想列出過濾後沒有供應商的產品以及我想要的產品沒有產品的訂單,不要顯示它們。

我的表結構是這樣的:

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

謝謝!

+0

到目前爲止你做了什麼?顯示您的查詢 – dbajtr

+0

您的數據結構不清晰..請更新您的問題添加一個明確的(表格相關的)構成一個適當的數據樣本和預期的結果 – scaisEdge

+1

提及數據庫以及具有適當的DDL的示例數據集。 – voidpro

回答

0

如果我理解你是正確的,那麼你想要所有的訂單有產品反對他們,反過來供應商反對他們過濾後的清單。 簡單的連接可以解決您的問題。

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

嘿,謝謝你的回覆,我會測試它並回復。 – Alex1231