这里是入门级SQL学习者。
这是我的数据片段。它包含某些订单的ID,以及该订单中产品的ID以及该特定产品的所有可能供应商的ID。它是内部联接的结果,数据也存在于单独且冗余度较低的表中。
我的问题是:如何选择至少有三种不同产品至少共享一个共同供应商的所有订单的Order_ID
s?我用星号标记了符合这些标准的数据:
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
您可以尝试在查询选择结果上应用计数(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
您可能会使用此查询获得与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