如果不存在则加入

时间:2019-02-13 12:57:38

标签: oracle join subquery exists

我遇到以下问题:

我有一个很长的查询(我们称其为查询“ Z”),其中包含许多联接和子查询。它分为两列:

  • A:项目
  • B:整数属性,范围保证为1-10

我想从表X的项(列A)中加入查询Z的输出中不存在的项,并为其赋予任意属性值10(列B)。

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

有什么建议吗?谢谢

3 个答案:

答案 0 :(得分:2)

您的问题尚不完全清楚,但我认为您的意思是表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和表X的UID。如果不是这种情况,则需要调整以上语句,或编辑问题以包括更多详细信息。

答案 1 :(得分:0)

根据您的评论,一种可能性是首先对“ Z”查询的结果进行union的选择,然后再对另一项select进行选择,另外仅选择其中的MIN()您的B栏。 因此,它看起来像:

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

答案 2 :(得分:0)

我的做法与@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
)