Выбор несовпадающих записей из полного внешнего объединения
У меня две таблицы
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, иначе это из 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;