2009-12-17 24 views

Respuesta

80

Sí, consulte el ejemplo en Wikipedia.

SELECT employee.*, department.* 
FROM employee 
     LEFT JOIN department 
      ON employee.DepartmentID = department.DepartmentID 
UNION ALL 
SELECT employee.*, department.* 
FROM department 
     LEFT JOIN employee 
      ON employee.DepartmentID = department.DepartmentID 
WHERE employee.DepartmentID IS NULL 
+0

El ejemplo de Wikipedia está formando un 'UNIÓN' de tres consultas, donde su ejemplo solo tiene dos. ¿Puedes explicar la diferencia? –

+2

@ GrahamBorland: El código en mi respuesta fue tomado de Wikipedia. Creo que Wikipedia ha sido editada desde que publiqué. La diferencia es que usan una unión interna y dos selecciones para obtener los registros que no coinciden (uno para cada tabla). La consulta en mi respuesta combina la unión interna y una de las selectas en una combinación izquierda. Es (A) + (B) + (C) en comparación con (A + B) + (C). –

+0

¿Sigue siendo así con el último SQLite (3.7.x) o se puede usar un OUTER JOIN estándar? – 01es

3

siguiente comentario de Jonathan Leffler, aquí es una respuesta alternativa a la de Marcos Byers:

SELECT * FROM table_name_1 LEFT OUTER JOIN table_name_2 ON id_1 = id_2 
UNION 
SELECT * FROM table_name_2 LEFT OUTER JOIN table_name_1 ON id_1 = id_2 

Ver here para la fuente original y otros ejemplos de SQLite.

+3

Creo WHERE employee.DepartmentID IS NULL es obligatorio, aunque no le importa obtener duplicaciones fila – Xenione

+1

Si no me equivoco, esto debería tener el mismo resultado, el UNION coincidirá con registros duplicados, pero es menos eficiente que el UNION TODO. –

+1

UNION (_without_ ALL) elimina las filas duplicadas – cowbert

Cuestiones relacionadas