【问题标题】:List name that have every items in MsSQL具有 MsSQL 中每个项目的列表名称
【发布时间】:2017-10-22 10:05:50
【问题描述】:
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”。
【问题讨论】:
标签:
sql
sql-server
tsql
relational-division
【解决方案1】:
这是一种方法:
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 的总体。仅返回与TableB 的所有 Items 值相关的a.Name 值。
Demo here