我在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
最佳方法是什么?
您可以将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)
这可能有点笨拙,但是您可以交叉联接两个表,然后从它们中减去等值联接:
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