如果不存在则加入
Join if not exists
我遇到了以下问题:
我有一个很长的查询(我们称之为查询 "Z" ),其中包含大量联接和子查询。它输出两列:
- A: 项目
- B:整数属性,范围保证为1-10
我想从 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
)
我遇到了以下问题:
我有一个很长的查询(我们称之为查询 "Z" ),其中包含大量联接和子查询。它输出两列:
- A: 项目
- B:整数属性,范围保证为1-10
我想从 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
)