0
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);

每个订单都有一套产品;我如何获得将订单 2 的产品集作为其产品集子集的所有订单?

我想得到结果

OrderID
--
 1
 2

为了进一步了解:

在示例中:订单 2 有产品 {2,3}

结果必须是订单 1 和 2,因为订单 1 有产品 {1,2,3} — 它有子集 {2,3}。另一方面,订单 3 的产品集是 {3,4} - 它没有子集 {2,3},因此它不能在结果中返回。

4

2 回答 2

2
SELECT DISTINCT Order_ID 
FROM Orders T1 
WHERE NOT EXISTS (
    SELECT Product_ID 
    FROM Orders 
    WHERE Order_ID = 2
  EXCEPT
    SELECT Product_ID 
    FROM Orders 
    WHERE Order_ID = T1.Order_ID);

好吧,这可能不是最有效的方法,但是,嘿!无论如何,DBMS 将不得不查看每一行。

于 2013-04-22T11:22:21.023 回答
0

我认为应该是这样的

select distinct orderid
from table_name
where product_id in ALL (select product_id from table_name where orderid = 2)
于 2013-04-22T11:09:58.250 回答