如何显示丢失的记录

问题描述 投票:0回答:2

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

表X

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

表Y

YID Name
1 A
2 B
3 C
4 D

我想为每个X数据显示缺少的[Y]。[名称]。

预期输出

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

最佳方法是什么?

sql sql-server tsql join sql-server-2017
2个回答
1
投票

您可以将cross join的列表与(不同的)name的列表进行xid,然后使用not exists对丢失的条目进行过滤:

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)

0
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.