从完全外连接中选择不匹配的记录

从完全外连接中选择不匹配的记录

我有两张桌子

tb1 
-------
1,ali
2,ana
3,kim
6,git
8,sen
9,pam

tb2
-------
2,joy
3,fin
4,roy
5,dina
9,tim

output
-------
1,ali
2,joy
3,fin
4,roy
5,dina
6,git
8,sen
9,tim

我需要连接两个表,对于公共列,我应该考虑来自 tb2 的 id 和 name,否则它来自 tb1。除此之外,我还需要来自两个表的非匹配记录,我的查询:

select case when tb1.id=tb2.id then tb2.id else tb1.id end as id , case when tb1.id=tb2.id then tb2.name else tb1.name end as name  
  from tb1 full outer join tb2
  on tb1.id=tb2.id;

它没有给我不匹配的记录。如何在不添加多个空值检查的情况下实现这一点?

答案1

的用法full outer join看起来正确,但选择项无法正确处理缺失项。使用coalesce应该可以解决问题:

SELECT          COALESCE (tb2.id, tb1.id) AS id, COALESCE (tb2.name, tb1.name) AS name
FROM            tb1
FULL OUTER JOIN tb2 ON tb1.id = tb2.id;

相关内容