我有两张桌子
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;