SQLite solo tiene INNER e LEFT JOIN.FULL OUTER JOIN con SQLite
¿Hay alguna manera de hacer una UNIÓN EXTERIOR COMPLETA con SQLite?
SQLite solo tiene INNER e LEFT JOIN.FULL OUTER JOIN con SQLite
¿Hay alguna manera de hacer una UNIÓN EXTERIOR COMPLETA con SQLite?
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
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.
Creo WHERE employee.DepartmentID IS NULL es obligatorio, aunque no le importa obtener duplicaciones fila – Xenione
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. –
UNION (_without_ ALL) elimina las filas duplicadas – cowbert
El ejemplo de Wikipedia está formando un 'UNIÓN' de tres consultas, donde su ejemplo solo tiene dos. ¿Puedes explicar la diferencia? –
@ 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). –
¿Sigue siendo así con el último SQLite (3.7.x) o se puede usar un OUTER JOIN estándar? – 01es