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 には製品 {1,2,3} があり、サブセット {2,3} があるため、結果は注文 1 と 2 になります。一方、注文 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 に答える