1

我正在研究两个应该相等的表。我运行此查询以查看表 B 中针对表 A 缺少哪些记录(我们有一个 3 列键):

select * 
from tableA A 
left join TableB B 
   on A.joinField1 = B.joinField1 
  and A.joinField2 = B.joinField2 
  and A.joinField3 = B.joinField3 
where B.joinField1 is null 
   or B.joinField2 is null 
   or B.joinField3 is null 

这样,如果 A 中的记录在 B 中丢失,它将在此查询中被过滤(基于键)。出于某种原因,当我随机选择其中一条丢失的记录并直接在表 B 中查找(使用简单的选择,按键过滤)时,它会显示出来。为什么我的查询在实际匹配时包含它们?没有空值和字段格式匹配。

4

1 回答 1

2

我们可以为此使用 EXCEPT 命令。EXCEPT 和 EXCEPT ALL 返回在一个关系中找到的行,而不是在另一个关系中找到的行。EXCEPT(或者,EXCEPT DISTINCT)仅采用不同的行,而 EXCEPT ALL 不会从结果行中删除重复项。请注意,MINUS 是 EXCEPT 的别名。你可以参考链接

于 2021-12-15T16:57:27.210 回答