2017-06-13 68 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