【问题标题】:How to select id if element contains all data in a list in SQL?如果元素包含SQL列表中的所有数据,如何选择id?
【发布时间】:2020-10-21 15:31:56
【问题描述】:

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

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']

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

【问题讨论】:

    标签: mysql sql postgresql having-clause relational-division


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      相关资源
      最近更新 更多