MySQL: объединение левого соединения с правым соединением - PullRequest
3 голосов
/ 17 сентября 2009

Скажем, у нас есть следующие таблицы t1 и t2:

t1:
id | column_1
-------------
 1 |   1
 2 |   2

t2:
id | column_2
-------------
 2 |   2
 3 |   3

и мы хотим найти следующий результат:

id | column_1 | column_2
------------------------
 1 |  1       | 
 2 |  2       | 2
 3 |          | 3

По сути, это объединение правого соединения с левым. Следующий код работает, но кажется неуклюжим:

(
    SELECT t1.id, t1.column_1, t2.column_2 
    FROM t1 
    LEFT JOIN t2 ON t1.id = t2.id
)
UNION
(
    SELECT t2.id, t1.column_1, t2.column_2 
    FROM t1 
    RIGHT JOIN t2 ON t1.id = t2.id
)

Есть ли лучший способ добиться этого?

Ответы [ 3 ]

7 голосов
/ 17 сентября 2009
select a.id, t1.column_1, t2.column_2
from (
    select id from t1
    union 
    select id from t2
) a
left outer join t1 on a.id = t1.id
left outer join t2 on a.id = t2.id
1 голос
/ 18 сентября 2009

Попробуйте это:

SELECT t1.id, t1.column_1, t2.column_2 
FROM t1 
FULL OUTER JOIN t2 ON (t1.id = t2.id)

Редактировать: Не работает, MySQL не знает FULL OUTER JOIN. Посмотрите здесь: http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

0 голосов
/ 17 сентября 2009

Сам не пробовал, но это может сработать:

SELECT t1.id, t1.column_1, t2.column_2, t2a.column_2
FROM t1     
LEFT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t2 AS t2a ON t1.id = t2a.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...