包含MsSQL中每个项目的列表名称

时间:2017-10-22 10:05:51

标签: sql sql-server tsql relational-division

TableA
Name Items
  A  1
  A  2
  A  2
  A  3
  A  3
  B  1
  B  1
  B  2
  B  2
  C  1
  C  2
  C  2
  C  3

TableB
Items ItemsName
   1  One
   2  Two
   3  Three

我想列出

Name
A
C

因为A和C包含TableB中的所有项目。 B没有3。 我想我应该使用“NOT EXISTS”。

1 个答案:

答案 0 :(得分:5)

这是一种方法:

SELECT a.Name
FROM TableB AS b
JOIN TableA as a ON b.Items = a.Items
GROUP BY a.Name
HAVING COUNT(DISTINCT b.Items) = (SELECT COUNT(DISTINCT Items) FROM TableB)

查询将TableB的记录与TableA的记录连接起来。使用INNER JOIN,我们可以找到TableA的匹配记录。

HAVING子句检查不同Items值的数量是否等于TableB的总体数。仅返回与{em> a.Name的所有 Items值相关的TableB个值。

Demo here