Как сделать полное внешнее объединение двух таблиц с одинаковым расположением, не повторяя?
У меня есть таблицы с одинаковым расположением (те же столбцы). Существует один идентификатор и другие данные. Мне нужен запрос, который возвращает только один идентификатор, устанавливающий пустые поля данных, если этот идентификатор не был доступен в требуемой таблице.
Пример:
Table A
ID - Val1 - Val2
1 - 2 - 2
2 - 3 - 3
4 - 1 - 5
Table B
ID - Val1 - Val2
2 - 3 - 3
3 - 2 - 1
4 - 2 - 3
Result
ID - Val1A - Val2A - Val1B - Val2B
1 - 2 - 2 - NULL - NULL
2 - 3 - 3 - 3 - 3
3 - NULL - NULL - 2 - 1
4 - 1 - 5 - 2 - 3
Я использую MS SQL Server. Спасибо!
2 ответа
Решение
Используйте coalesce, чтобы получить ненулевой идентификатор, остальные столбцы будут нулевыми для несоответствующей таблицы
select coalesce(a.id,b.id) as ID, Val1A , Val2A , Val1B , Val2B
from TableA a
Full outer join tableB b
ON <.....>
SELECT COALESCE(a.ID,b.ID) AS ID,
a.Val1 AS TableA_Val1,
a.Val2 AS TableA_Val2,
b.Val1 AS TableB_Val1,
b.Val2 AS TableB_Val2
FROM TableA a
FULL OUTER JOIN TableB b
ON a.ID = b.ID
Вы можете проверить это здесь: http://sqlfiddle.com/