使用IN和ALL

时间:2009-11-03 09:10:17

标签: sql-server tsql

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

e.g 我想得到我在这里列出的所有类别下列出的书ID: (A,B,C,D,......等),而不是其中任何一个。

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

感谢您的帮助..

1 个答案:

答案 0 :(得分:2)

您可以使用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)