2013-04-22 229 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