Объединение левого и Правого соединения в запросе 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Но если вы опустите слово
ALLSELECT * 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-запросов в единую таблицу из всех совпадающих строк.