我有带数据的表1和有带元数据的查找表的表2。我需要一个查询,该查询返回表1中的任何列在表2中不存在的表1中的所有记录。 以下查询对于一列工作正常,但是如果我在联接中使用多个列,则不会。 工作查询:
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_FCCST1 左外部连接“ fccs”。V_META_NOT_FOUNDV2位于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_FCCST1 左外部联接“ fccs”。V_META_NOT_FOUNDV2在trim(T1.account)= trim(V2.account)上 和trim(T1.entity)= trim(v2.entity)
其中 V2.account为空或v2.entity为空
第二个查询继续从表1中带来表2中存在的记录。 任何帮助表示赞赏!
答案 0 :(得分:0)
我需要一个查询,该查询返回表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
。