如何显示丢失的记录
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
我在 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