假设我有下表:
CREATE TABLE orders (
Order_ID int,
Product_ID int,
PRIMARY KEY(Order_ID,Product_ID)
);
INSERT INTO orders VALUES (1,1), (1,2), (1,3), (2,2), (2,3), (3,3), (3,4);
如何获得包含产品ID 2和3的所有订单?
我想得到结果
Order_ID
--
1
2
结果必须是订单1和2,因为订单1有产品{1,2,3} - 它有子集{2,3}。另一方面,订单3的产品集是{3,4} - 它没有子集{2,3},因此不能在结果中返回。
答案 0 :(得分:0)
如果我理解正确的话:
Select ID
From table_name
where P_ID = 2
答案 1 :(得分:0)
一种方法是选择与您的子集对应的所有行 然后按顺序分组,并计算您有多少对应。如果它等于您的子集的大小,那么该订单是合格的。
SELECT orders.order_id
FROM orders
WHERE orders.product_id in (2, 3)
GROUP BY orders.order_id
HAVING COUNT(1) = 2
请注意,这是有效的,因为您已定义PRIMARY KEY(Order_ID,Product_ID)
,这是一个非常好的主意!