SELECT o.customerId
FROM Order o
WHERE (SELECT count(distinct b.bookId)
FROM Book b
WHERE o.bookId = b.bookId
AND b.title in ('BOOK A', 'BOOK B')
) = 2;
這實質上將檢查的每一訂單的書的數量,限制在 「BOOK A」 和 「書B」 爲2,也就是即兩本書必須以相同的順序。
如果你想尋找的書籍在同一客戶的任何命令,你需要的order
的第二個實例:
SELECT o.customerId
FROM Order o
WHERE (SELECT count(distinct b.bookId)
FROM Book b JOIN Order oo ON oo.bookId = b.bookId
WHERE o.customerId = oo.customerId
AND b.title in ('BOOK A', 'BOOK B')
) = 2;
這可以優化,假設表Customer
:
SELECT c.customerId
FROM Customer c
WHERE (SELECT count(distinct b.bookId)
FROM Book b JOIN Order oo ON oo.bookId = b.bookId
WHERE c.customerId = oo.customerId
AND b.title in ('BOOK A', 'BOOK B')
) = 2;
這樣可以避免結果中出現重複的客戶,並加入更小的表格,因此應該更快。
所有這三種解決方案都可以輕鬆擴展到三,四本...書籍。只需在IN
中列舉它們並調整計數。
這將返回客戶ID,如果他們訂購了Book A – Ghost
@Ghost的兩份副本,我糾正了這一點,計算不同的'bookId'秒。 – FrankPl