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

Ala*_*ang 3 sql t-sql sql-server 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
Run Code Online (Sandbox Code Playgroud)

我想列出

Name
A
C
Run Code Online (Sandbox Code Playgroud)

因为A和C拥有TableB中的所有项目.B没有3.我想我应该使用"NOT EXISTS".

Gio*_*sos 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)
Run Code Online (Sandbox Code Playgroud)

查询连接记录的TableB记录TableA.使用INNER JOIN我们可以找到匹配的记录TableA.

HAVING子句检查不同Items值的数量是否等于总体if TableB.仅返回a.Name所有 值相关的ItemsTableB.

在这里演示