SQL:复杂查询

时间:2017-12-20 20:16:22

标签: sql sql-server

这里是入门级SQL学习者。

以下是我的数据片段。它包含某些订单的ID,以及该订单中产品的ID以及该特定产品的所有可能供应商的ID。它是内部联接的结果,数据也存在于单独且冗余度较低的表中。

我的问题是:如何选择至少三种不同产品的所有订单的Order_ID个共享至少一个共同供应商? 我用星号标记了符合这些标准的数据:

order_ID    product_ID  supplier_ID
10191*      00011       1088
10191*      00011       1212
10191*      00011       1774
10191*      00011**     3219***
10191*      00013       1212
10191*      00013**     3219***
10191*      00033       1001
10191*      00033**     3219***
10191*      00032       0061
102452      00013       1212
102452      00013       3219
102452      00027       1774
10297       00033       1001
10297       00033       3219
103067      00033       1001
103067      00033       3219

所以结果应该是

Order_ID
10191

提前谢谢!

这是产生此表的SQL代码

 select
     OI.order_ID, S.product_ID, S.supplier_ID
 from 
     Orders_Items OI 
 inner join
     Supplies S on OI.product_ID = S.product_ID
 group by 
     OI.order_ID, S.product_ID, S.supplier_ID

2 个答案:

答案 0 :(得分:0)

你可以尝试在查询选择结果上应用on count(distinct product_id)> = 3

,

答案 1 :(得分:0)

您可能会使用此查询获得与scaisEdge相同的结果

 SELECT OI.order_ID
 FROM Orders_Items OI 
 INNER JOIN Supplies S 
    ON OI.product_ID=S.product_ID
 GROUP BY  OI.order_ID, S.supplier_ID
 HAVING COUNT(distinct t.product_id) >= 3