我遇到以下问题:
我有一个很长的查询(我们称其为查询“ Z”),其中包含许多联接和子查询。它分为两列:
我想从表X的项(列A)中加入查询Z的输出中不存在的项,并为其赋予任意属性值10(列B)。
我尝试使用内部子查询uisng创建子查询,但该子查询不存在,但这需要在内部复制我的原始查询,并且要花费很多时间(我什至没有设法执行它)。
有什么建议吗?谢谢
答案 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
)