Объединение левого и Правого соединения в запросе mysql
Я соединяю 2 таблицы-tbl1 и tbl2. Левое соединение дает все данные из tbl1, который находится в tbl2 или только на tbl1. Правое соединение дает данные из tbl2, которые не существуют в tbl1.
Я хочу объединить оба результата.
Как лучше всего это сделать, чтобы я получил все данные из tbl1 и tbl2 ?
4 ответа:
Единственное, что вы можете сделать, это использовать
UNION
. MySQL не поддерживаетFULL JOIN
так же, как в MSSQL.SELECT * FROM tbl1 t1 LEFT JOIN tbl2 t2 ON t1.col = t2.col UNION SELECT * FROM tbl1 t1 RIGHT JOIN tbl2 t2 ON t1.col>= t2.<col
Смотрите здесь: имитация полного соединения в MYSQL
Кстати, у
UNION
есть необязательное ключевое словоALL
, КогдаALL
опущено,UNION
автоматически выбирает строкиDISTINCT
из результирующего набора.EXAMLE:
SELECT * FROM tableA UNION ALL SELECT * FROM tableA
Это может привести к дубликатам строк
ColA ColB ================== 1 John 2 Jade 2 Jade 3 Hello
Но если вы опустите слово
ALL
SELECT * FROM tableA UNION SELECT * FROM tableA
Это может привести к различным строкам только
ColA ColB ================== 1 John 2 Jade 3 Hello
Чего ты хочешь, так это
FULL JOIN
LEFT JOIN
+RIGHT JOIN
=FULL JOIN
Итак, попробуйте следующее:
SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl1.id = tbl2.id UNION SELECT * FROM tbl1 RIGHT JOIN tbl2 ON tbl1.id = tbl2.id
Предложение
UNION
объединяет результаты двух SQL-запросов в единую таблицу из всех совпадающих строк.