【问题标题】:Databricks, comparing two tables to see which records are missingDatabricks,比较两个表以查看缺少哪些记录
【发布时间】:2021-12-15 15:25:12
【问题描述】:

我正在研究两个应该相等的表。我运行此查询以查看表 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 中查找时(使用简单的选择,按键过滤),它就会显示出来。 为什么我的查询在实际匹配时包含它们?没有空值和字段格式匹配。

【问题讨论】:

    标签: sql databricks azure-databricks databricks-sql


    【解决方案1】:

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

    【讨论】:

    • 除了工作正常。仍然想知道为什么我的查询没有。
    • 你遇到了什么错误?
    • 另一种简单的方法,从tblA中选择数据不存在的数据(从tblB中选择数据)
    • 我没有收到任何错误,那些丢失的记录实际上并没有丢失,但仍然包含在查询中
    • 在您的查询中,您将根据 joinField1、joinField2、joinField3 条件加入,其中所有字段的条件也为“空”。在这种情况下,如果加入条件满足, where 条件将根本不满足。 null 条件也是如此,我们应该检查连接条件列以外的内容。
    猜你喜欢
    • 2019-05-27
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多