如何显示丢失的记录

How to show missing records

我在 SQL Server 2017 中有如下两个表:

Table X

XID Name
1  A
1  B
1  C
2  A
2  B 
3  C

Table Y

YID Name
1 A
2 B
3 C
4 D

我想为每个 X 数据显示缺失的 [Y].[Name]。

预期输出

XID Name
1   D
2   C
2   D
3   A
3   B
3   D

最好的方法是什么?

您可以 cross join name 的列表与(不同的)xid 的列表,然后使用 not exists:[=15 过滤缺失的条目=]

select x.xid, y.name
from y
cross join (select disctinct xid from x) x
where not exists (select 1 from x x1 where x1.id = x.id and x1.name = y.name)

它可能有点笨拙,但您可以交叉连接两个表,然后从它们中减去等值连接:

SELECT     x.id, y.name
FROM       x
CROSS JOIN y
EXCEPT
SELECT     x.id, y.name
FROM       x
JOIN       y ON x.name = y.name