Если вы хотите объединить две таблицы, которые имеют только частично равные столбцы, то вы должны заполнить отсутствующие столбцы соответствующих таблиц NULL или другими значениями по умолчанию. Э.Г.
- Таблица X с колонками A, B, C, D, E
- Таблица Y с колонками A, B, C, F
SELECT A, B, C, D, E, '' AS F
FROM X
UNION ALL
SELECT A, B, C, '' AS D, NULL AS E, F
FROM Y
Используйте UNION (без ALL), если вы хотите удалить дубликаты. Могут быть только дубликаты, если дополнительные столбцы соответствуют значениям по умолчанию, используемым для другой таблицы.
Другой подход заключается в объединении соответствующих столбцов для устранения дубликатов в этих столбцах
SELECT
COALESCE(X.A, Y.A) AS A,
COALESCE(X.B, Y.B) AS B,
COALESCE(X.C, Y.C) AS C,
X.D,
X.E,
Y.F
FROM
X
FULL OUTER JOIN Y
ON X.A = Y.A AND
X.B = Y.B AND
X.C = Y.C
Это, вероятно, соответствует вашей идее объединить UNION и JOIN. В отличие от подхода UNION, это объединяет строки с одинаковыми A, B и C.
Обратите внимание, что вы должны использовать FULL OUTER JOIN , чтобы включить результаты обеих таблиц, даже если соответствующая запись отсутствует в другой таблице. Не все диалекты SQL имеют внешнее соединение.
Функция coalesce имеет разные названия на разных диалектах.
Вы также можете столкнуться с проблемой JOIN пропущенных значений NULL при объединении значений NULL.