获取 A 中的所有行加上 B 中缺失的行
get all rows from A plus missing rows from B
这看起来很明显,但我失败了。
在 Teradata SQL 中,如何获取 table A 中的所有行,以及 table B 中未出现在 table A 中的行,基于键字段键?
这一定被问过一千遍了。但老实说,我找不到答案。
完全外部联接似乎给我重复的 "inner join" 个结果。
--编辑,基于第一条评论(谢谢)--
所以如果我愿意
select * from A
union all
select * from B
left join A
on A.key = B.key
where A.key IS NULL
我想这可行(未经测试),但这是最高效的方式吗?
有时 EXISTS
或 NOT EXISTS
比连接执行得更好:
select * from A
union all
select * from B
where not exists (
select 1 from A
where A.key = B.key
)
我假设 key
列已经编入索引。
你的版本没问题。 . .如果您 select 正确的列:
select A.* from A
union all
select B.*
from B left join
A
on A.key = B.key
where A.key IS NULL;
我认为 Teradata 在优化联接方面做得很好。也就是说,EXISTS
也是一个非常合理的选择。
这看起来很明显,但我失败了。
在 Teradata SQL 中,如何获取 table A 中的所有行,以及 table B 中未出现在 table A 中的行,基于键字段键?
这一定被问过一千遍了。但老实说,我找不到答案。 完全外部联接似乎给我重复的 "inner join" 个结果。
--编辑,基于第一条评论(谢谢)-- 所以如果我愿意
select * from A
union all
select * from B
left join A
on A.key = B.key
where A.key IS NULL
我想这可行(未经测试),但这是最高效的方式吗?
有时 EXISTS
或 NOT EXISTS
比连接执行得更好:
select * from A
union all
select * from B
where not exists (
select 1 from A
where A.key = B.key
)
我假设 key
列已经编入索引。
你的版本没问题。 . .如果您 select 正确的列:
select A.* from A
union all
select B.*
from B left join
A
on A.key = B.key
where A.key IS NULL;
我认为 Teradata 在优化联接方面做得很好。也就是说,EXISTS
也是一个非常合理的选择。