Вопрос
Предположим, у нас есть таблица 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