如果不存在则加入

Join if not exists

我遇到了以下问题:

我有一个很长的查询(我们称之为查询 "Z" ),其中包含大量联接和子查询。它输出两列:

我想从 table X 个项目(A 列)中加入查询 Z 的输出,并给它们一个任意属性值 10(B 列)。

我尝试创建内部子查询 uisng 不存在的子查询,但这需要在内部复制我的原始查询并花费很多时间(我什至没有设法执行它)。

有什么建议吗?谢谢

根据您的意见,一种可能性是先对 "Z" 查询的结果进行 union,然后再进行 select 并仅选择 [= B 列的 13=]。 所以它看起来类似于:

SELECT A , MIN(B) FROM
(
  (QUERY Z) AS Z 
  union
  (SELECT ITEM as A, 10 as B FROM X)
)
GROUP BY A

你的问题并不完全清楚,但我认为你的意思是 table X 是查询 Z 中记录的超集。如果是这样,一个简单的外部连接应该会给你你想要的结果:

select coalesce(z.a, x.a) as a
       , coalesce(z.b, 10) as b
from x
     left outer join ( your query ) z
     on z.a = x.a

如果 X 不是 Z 的超集,那么您应该尝试使用 FULL OUTER JOIN。


我假定列 A 作为查询 Z 和 table X 的 UID。如果不是这种情况,您需要调整上述陈述,或编辑您的问题以包含更多详细信息。

我做的与@Ancaron 发布的类似。

SELECT A, B FROM Z
UNION ALL
SELECT A, '10' FROM X
WHERE NOT EXISTS 
(
select Z.A
from Z
WHERE Z.A=X.A
)