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

StackOverflow https://stackoverflow.com/questions/9614

  •  08-06-2019
  •  | 
  •  

Вопрос

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

itemid mark
1      5
2      3

и таблица В:

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?

Это было полезно?

Решение

Это называется полным внешним соединением, и оно изначально не поддерживается в 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

Другие советы

Не помешала бы некоторая работа, но вот немного 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.

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

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top