如果元素包含 SQL 列表中的所有数据,如何 select id?

How to select id if element contains all data in a list in SQL?

我有一个具有以下架构的数据库:

StoreID | BookName
------------------
   1      Harry Potter
   1      Lord of the Rings
   1      Hobbit
   2      Hobbit
   2      Hunger Games
   3      American Gods
   3      Redwall
   4      Calvin and Hobbes

我想获取包含列表中提及的所有书籍的所有商店 ID ['Lord of the Rings', 'Hobbit']

SQL 中是否有可以做到这一点的运算符?

我知道 SQL 中的 IN 运算符可以获取包含列表中至少一本书的所有 storeId。我相信脚本看起来像这样:

Select StoreID
FROM BookStores
WHERE BookName IN ['Lord of the Rings', 'Hobbit']

是否有脚本可以做类似的事情,除了 return storeId 包含列表中提到的所有书籍? (在这种情况下,唯一的 id returned 将是 1)

您可以使用聚合:

Select StoreID
FROM BookStores
WHERE BookName IN ('Lord of the Rings', 'Hobbit')
GROUP BY StoreID
HAVING COUNT(*) = 2

这假定同一本书不会在同一家商店出现两次。如果发生这么多,那么您可以将 HAVING 子句更改为:

HAVING COUNT(DISTINCT BookName) = 2