SQL:复杂查询

问题描述 投票:0回答:2

这里是入门级SQL学习者。

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

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

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
sql sql-server
2个回答
0
投票

您可以尝试在查询选择结果上应用计数(distinct product_id)> = 3

  select t.order_id
  from ( 
        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) t
  group by t.order_id, t.supplier_ID
  having count(distinct t.product_id) >= 3

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
© www.soinside.com 2019 - 2024. All rights reserved.