У меня есть две таблицы с почти одинаковыми столбцами, за исключением того, что Table2
имеет три дополнительных столбца в конце Old_Column2, Old_Column3 and Column4
. Если запись существует в Таблица1 и Таблица2, Таблица2 перекрывает запись в Таблице1, в противном случае отображаются записи из Таблицы1. Запрос до UNION
позаботится об этом.
Теперь я также хочу записи, которые существуют в Таблице2, но не в Таблице1. Это пункт UNION
. Однако с UNION
VIEW
становится медленным.
Я не могу использовать LEFT JOIN
сейчас. Я думал об использовании FULL JOIN
вместо этого, но это может быть слишком медленно. Какой оптимальный способ сделать это?
Перефразировать Select all records from Table1, if the same record exists in Table2 overlay the record in the view. Add the new records where Old_Column2 and 3 equals to new
Вот оператор VIEW
, который я использую.
CREATE VIEW AVIEW AS
SELECT
IF(U.Column1 IS NULL, L.Column1, U.Column1) Column1,
IF(U.Column1 IS NULL, L.Column2, U.Column2) Column2,
IF(U.Column1 IS NULL, L.Column3, U.Column3) Column3,
IF(U.Column1 IS NULL, NULL, U.Old_Column2) Old_Column2,
IF(U.Column1 IS NULL, NULL, U.Old_Column3) Old_Column3,
IF(U.Column1 IS NULL, NULL, U.Column4) Column4
FROM
Table1 L
LEFT JOIN Table2 U
ON L.Column1 = U.Column1 AND L.Column2 = U.Old_Column2 AND L.Column3 = U.Old_Column3
WHERE
U.Column1 IS NULL OR U.Column1 IS NOT NULL AND U.Column4 = 0
UNION
SELECT * FROM Table2 WHERE Old_Column2 = 'new' AND Old_Column3 = 'new' and Column4 = 0