检查SQL中是否存在子集

时间:2013-04-22 10:56:29

标签: sql

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

2 个答案:

答案 0 :(得分:1)

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必须查看每一行。

答案 1 :(得分:0)

我认为应该是这样的

select distinct orderid
from table_name
where product_id in ALL (select product_id from table_name where orderid = 2)