【问题标题】:Using IN with ALL将 IN 与 ALL 一起使用
【发布时间】:2010-12-12 13:48:21
【问题描述】:

如何选择列在我提供的每个类别 ID 下的图书 ID 作为一组类别 ID

例如 我想获取我在此处列出的所有类别下列出的书籍 ID: (A,B,C,D,...等),而不是在其中任何一个下列出。

以下选择语句不适用于我的查询条件: 选择书名 FROM bookCategories WHERE categoryId IN ('A','B','C','D',.....); 因为它检索任何指定类别下列出的书籍。

感谢您的帮助..

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    您可以使用IN 并检查每本书的不同类别数量是否与您在IN 谓词中提供的类别数量相同:

    SELECT T.bookId
      FROM (SELECT bookId, count(distinct categoryId) catCount
              FROM bookCategories
             WHERE categoryId IN ('A','B','C','D',.....)
          GROUP BY bookId) T
     WHERE T.catCount = myCategoriesCount
    

    如果你不知道你有多少个类别,你可以创建一个临时表#CAT(categoryId),用你的类别填充它并运行以下查询:

    SELECT T.bookId
      FROM (SELECT bc.bookId, count(distinct c2.categoryId) catCount
              FROM bookCategories bc
              JOIN #CAT c2 on bc.categoryId = c2.categoryId
          GROUP BY bc.bookId) T
    WHERE T.catCount = (SELECT COUNT(DISTINCT categoryId) FROM #CAT)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      相关资源
      最近更新 更多