Почему вы объединяете две таблицы и сохраняете строки, которые не совпадают с ОБА таблицами?
Полное объединение имеет случаи, когда это полезно. Одна из них сравнивает две таблицы для различий, таких как XOR между таблицами:
SELECT *
FROM t1
FULL JOIN t2
ON t1.id = t2.id
WHERE t1.id IS NULL
OR t2.id IS NULL;
Пример:
t1.id ... t2.id
1 NULL
NULL 2
Вы также можете достичь этого, используя два левых соединения.
Да, вы могли бы:
SELECT t1.*, t2.*
FROM t1
LEFT JOIN t2
ON t1.id = t2.id
WHERE t2.id IS NULL
UNION ALL
SELECT t1.*, t2.*
FROM t2
LEFT JOIN t1
ON t1.id = t2.id
WHERE t1.id IS NULL;
Некоторые SQL диалекты не поддерживают FULL OUTER JOIN
, и мы подражаем так. Связанный: Как выполнить ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ в MySQL?
С другой стороны, RIGHT JOIN
полезно, когда вам нужно объединить более двух таблиц:
SELECT *
FROM t1
JOIN t2
...
RIGHT JOIN t3
...
Конечно, вы можете утверждать, что вы можете переписать его в соответствующую форму, либо изменив порядок соединения, либо используя подзапросы (встроенные представления). С точки зрения разработчика всегда полезно иметь инструменты (даже если вам не нужно их использовать)