2013-04-22 215 views
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的产品组作为其产品组的子集的所有订单?检查SQL中是否存在子集

我希望得到尽可能导致

OrderID 
-- 
1 
2 

做进一步的了解:

在这个例子中:订单2产品已{2,3}

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

+0

我也提出了这个问题。当我刷新它,已经关闭,所以我做了一个新的 – 2013-04-22 11:10:28

+0

我知道你做的。但是你的新问题不包含比旧的更多的信息 - 你为什么认为旧的问题很接近?而你又一次没有正确地格式化它。 – 2013-04-22 11:11:48

+0

旧的问题没有包含最后7行。关闭后我改变了问题,所以refresehd问题没有用。 – 2013-04-22 11:18:14

回答

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

+0

非常好,这是我想要的。谢谢 – 2013-04-22 16:34:17

0

应该是这样的,我认为

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

这一个与syndax有一些麻烦。 “in all”无效 – 2013-04-22 16:40:00