2012-08-11 14 views

Respuesta

10

El único que puede hacerlo es mediante el uso de UNION. MySQL no es compatible con FULL JOIN como en MSSQL.

SELECT * 
FROM tbl1 t1 
     LEFT JOIN tbl2 t2 
      ON t1.col = t2.col 
UNION 
SELECT * 
FROM tbl1 t1 
     RIGHT JOIN tbl2 t2 
      ON t1.col>= t2.<col 

SEE HERE: Simulating FULL JOIN in MYSQL

Por cierto, UNION tiene palabra clave opcional ALL, cuando se omite la ALL, UNION selecciona automáticamente DISTINCT filas del conjunto de resultados.

examle:

SELECT * 
FROM tableA 
UNION ALL 
SELECT * 
FROM tableA 

esto puede dar lugar a duplicados filas

ColA ColB 
================== 
1  John 
2  Jade 
2  Jade 
3  Hello 

pero si se omite la palabra ALL

SELECT * 
FROM tableA 
UNION 
SELECT * 
FROM tableA 

esto puede resultar filas distintas solamente

ColA ColB 
================== 
1  John 
2  Jade 
3  Hello 
4

Lo que queremos es FULL JOIN

LEFT JOIN + RIGHT JOIN = FULL JOIN

Así que trate esto:

SELECT * FROM tbl1 
LEFT JOIN tbl2 ON tbl1.id = tbl2.id 
UNION 
SELECT * FROM tbl1 
RIGHT JOIN tbl2 ON tbl1.id = tbl2.id 

La cláusula UNION combina los resultados de dos consultas SQL en una sola tabla de todas las filas coincidentes.

1

que tienen que utilizar externa completa, pero MySQL no apoya que .. Usted puede hacer esto para conseguir el resultado:

SELECT * 
FROM tbl1 t1 LEFT JOIN tbl2 t2 
ON t1.<col> = t2.<col> 
UNION 
SELECT * 
FROM tbl1 t1 RIGHT JOIN tbl2 t2 
ON t1.<col>= t2.<col> 
2

Aquí es una alternativa que se puede extender fácilmente si tiene una unión completa de más de 2 tablas:

SELECT t1*, t2.* 
FROM 
    (SELECT col 
     FROM tbl1 
    UNION 
     SELECT col 
     FROM tbl2 
    ) AS d 
    LEFT JOIN tbl1 AS t1 
    ON t1.col = d.col 
    LEFT JOIN tbl2 AS t2 
    ON t2.col = d.col ; 
Cuestiones relacionadas