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?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top