2008-08-13 27 views
8

Supongamos que tenemos una tabla A:externa bidireccional

itemid mark 
1  5 
2  3 

y la Tabla B:

itemid mark 
1  3 
3  5 

que quieren unirse a A * B en A.itemid = B.itemid derecha e izquierda formas. es decir, resultado:

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

¿Hay alguna manera de hacerlo en una consulta en MySQL?

Respuesta

6

Se llama una combinación externa completa y no es compatible de forma nativa en MySQL, a juzgar por su docs. Puede solucionar esta limitación utilizando UNION como se describe en los comentarios de la página a la que me he vinculado.

[edit] Como otros publicaron fragmentos, aquí tienes. Puedes ver la explicación en la 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 
2

podría hacer con un poco de trabajo, pero aquí es un poco 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; 

Esto se basa en la unión izquierda, que devuelve todas las filas de la tabla original (en este caso se trata de la mesa subselección T). Si no hay coincidencias en la tabla unida, establecerá la columna en NULO.

-1

Esto funciona para mí en SQL Server:

select isnull(a.id, b.id), a.mark, b.mark 
from a 
full outer join b on b.id = a.id 
+0

Pregunta explícitamente dice MySQL – cdeszaq