Pergunta
Suponha que temos uma tabela A:
itemid mark
1 5
2 3
e tabela B:
itemid mark
1 3
3 5
Quero ingressar em A*B em A.itemid=B.itemid tanto para a direita quanto para a esquerda.ou sejaresultado:
itemid A.mark B.mark
1 5 3
2 3 NULL
3 NULL 5
Existe uma maneira de fazer isso em uma consulta no MySQL?
Solução
É chamado de full outer join e não é suportado nativamente no MySQL, a julgar pela sua documentos.Você pode contornar essa limitação usando UNION conforme descrito nos comentários da página à qual criei um link.
[editar] Já que outros postaram trechos, aqui está.Você pode ver a explicação na página vinculada.
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
Outras dicas
Poderia ter algum trabalho, mas aqui está um pouco de 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;
Isso depende da junção esquerda, que retorna todas as linhas da tabela original (neste caso, esta é a tabela de subseleção T).Se não houver correspondências na tabela unida, a coluna será definida como NULL.
Isso funciona para mim no SQL Server:
select isnull(a.id, b.id), a.mark, b.mark
from a
full outer join b on b.id = a.id