获取 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

我想这可行(未经测试),但这是最高效的方式吗?

有时 EXISTSNOT 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也是一个非常合理的选择。