如果元素包含 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
我有一个具有以下架构的数据库:
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