Hãy thử điều này:
SELECT OrderID
FROM OrderDetailTable JOIN OrderedTable USING (ItemID)
GROUP BY OrderID
HAVING COUNT(DISTINCT ItemID) = (SELECT COUNT(DISTINCT ItemID) FROM OrderedTable)
Tóm lại, ý tưởng như sau:
- Đếm xem có bao nhiêu hàng OrderDetailTable khớp với OrderTable theo ItemID,
- và sau đó so sánh với tổng số ItemID từ OrderedTable.
Nếu hai số này bằng nhau, OrderID đã cho "chứa" tất cả các ItemID. Nếu cái này nhỏ hơn cái kia, có ít nhất một ItemID không có trong OrderID đã cho.
Tùy thuộc vào khóa chính của bạn, DISTINCT
có thể không cần thiết (mặc dù nó không đau).