-3

假设我有下表:

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},因此它不能在结果中返回。

4

2 回答 2

0

一种方法是选择与您的子集相对应的所有行。
然后按顺序分组,数一数你有多少信件。如果它等于您的子集的大小,则该订单是合格的。

SELECT orders.order_id
FROM orders
WHERE orders.product_id in (2, 3)
GROUP BY orders.order_id
HAVING COUNT(1) = 2

请注意,这是有效的,因为您有 define PRIMARY KEY(Order_ID,Product_ID),这是一个非常好的主意!

小提琴

于 2013-04-22T13:51:05.393 回答
0

如果我对您的理解正确:

Select ID
From table_name
where P_ID = 2
于 2013-04-21T22:28:52.230 回答