Двунаправленное внешнее соединение

Предположим, у нас есть таблица A:

itemid mark
1      5
2      3

и таблица B:

itemid mark
1      3
3      5

Я хочу присоединиться к A * B на A.itemid = B.itemid как справа, так и слева. т.е. результат:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

Есть ли способ сделать это в одном запросе в MySQL?

13.08.2008 09:41:43
3 ОТВЕТА
РЕШЕНИЕ

Это называется полным внешним объединением и изначально не поддерживается в MySQL, судя по его документам . Вы можете обойти это ограничение, используя UNION, как описано в комментариях к странице, на которую я ссылался.

[править] Так как другие опубликовали фрагменты, вот, пожалуйста. Вы можете увидеть объяснение на связанной странице.

SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL
7
13.08.2008 10:19:03

Можно сделать с некоторой работой, но вот некоторые sql

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid;

Это основано на левом соединении, которое возвращает все строки в исходной таблице (в данном случае это таблица подвыбора T). Если в объединенной таблице нет совпадений, для столбца будет установлено значение NULL.

2
13.08.2008 10:09:47

Это работает для меня на SQL Server:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
-1
22.01.2013 10:18:48
Вопрос явно заявляет MySQL
cdeszaq 19.02.2013 18:35:17