【问题标题】:Join two tables on multiple columns and return only records from first table that are not in the second在多个列上连接两个表并仅返回第一个表中不在第二个表中的记录
【发布时间】:2020-06-29 09:16:40
【问题描述】:

我有表 1 的数据和表 2 作为元数据的查找表。我需要一个查询来返回表 1 中的所有记录,其中表 1 中的任一列在表 2 中都不存在。 以下查询适用于一列,但如果我在联接中使用多个列,则不是。 工作查询:

select
T1.SCENARIO,
T1.year,
T1.period,
T1.ENTITY,
T1.account,
T1.ICP,
T1.MVMTS,
T1.C1,
T1.C2,
T1.C3,
T1.MULTI_GAAP,
T1.VLAUE

来自 “fccs”.MV_FACT_FCCS T1 左外连接 "fccs".V_META_NOT_FOUND V2 on trim(T1.account) = trim(V2.account)

在哪里 v2.account 为空

无法正常工作:

select
T1.SCENARIO,
T1.year,
T1.period,
T1.ENTITY,
T1.account,
T1.ICP,
T1.MVMTS,
T1.C1,
T1.C2,
T1.C3,
T1.MULTI_GAAP,
T1.VLAUE

来自 “fccs”.MV_FACT_FCCS T1 左外连接“fccs”.V_META_NOT_FOUND V2 on trim(T1.account) = trim(V2.account) 和修剪(T1.entity)=修剪(v2.entity)

在哪里 v2.account 为 null 或 v2.entity 为 null

第二个查询继续将表 1 中的记录带到表 2 中的位置。 任何帮助表示赞赏!

【问题讨论】:

    标签: sql oracle join


    【解决方案1】:

    我需要一个查询来返回表 1 中的所有记录,其中表 1 中的任一列都不存在于表 2 中。

    使用not exists:

    select ff.*
    from "fccs".MV_FACT_FCCS ff
    where not exists (select 1
                      from "fccs".V_META_NOT_FOUND mnf
                      where trim(ff.account) = trim(mnf.account)
                     ) or
          not exists (select 1
                      from "fccs".V_META_NOT_FOUND mnf
                      where trim(ff.entity) = mnf.trimc
                     ) ;
    

    注意:这回答了问题书面。您的意思可能是两个条件都不满足。在这种情况下,请使用 and 而不是 or

    【讨论】:

    • 非常感谢!但是不起作用,我的结果仍然返回表 2 中帐户的记录。
    • @user1766419 。 . .将or 替换为and 作为建议的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2021-08-23
    相关资源
    最近更新 更多