sql >> Base de Datos >  >> RDS >> SQLite

Emulación de SQLite FULL OUTER JOIN

Resumen :en este tutorial, aprenderá cómo emular la unión externa completa de SQLite usando UNION y LEFT JOIN cláusulas.

Introducción a SQL FULL OUTER JOIN cláusula

En teoría, el resultado de FULL OUTER JOIN es una combinación de LEFT JOIN y un RIGHT JOIN . El conjunto de resultados de la unión externa completa tiene NULL valores para cada columna de la tabla que no tiene una fila coincidente en la otra tabla. Para las filas coincidentes, FULL OUTER JOIN produce una sola fila con valores de las columnas de las filas en ambas tablas.

La siguiente imagen ilustra el resultado de FULL OUTER JOIN cláusula:

Ver los siguientes cats y dogs mesas.

-- create and insert data into the dogs table
CREATE TABLE dogs (
    type       TEXT,
    color TEXT
);

INSERT INTO dogs(type, color) 
VALUES('Hunting','Black'), ('Guard','Brown');

-- create and insert data into the cats table
CREATE TABLE cats (
    type       TEXT,
    color TEXT
);

INSERT INTO cats(type,color) 
VALUES('Indoor','White'), 
      ('Outdoor','Black');Code language: SQL (Structured Query Language) (sql)

La siguiente instrucción utiliza FULL OUTER JOIN cláusula para consultar datos de los dogs y cats mesas.

SELECT *
FROM dogs 
FULL OUTER JOIN cats
    ON dogs.color = cats.color;Code language: SQL (Structured Query Language) (sql)

A continuación se muestra el resultado de la afirmación anterior:

Tipo Color Tipo Color
Caza Negro Al aire libre Negro
Guardia Marrón NULO NULO
NULO NULO Interior Blanco

Desafortunadamente, SQLite no es compatible con RIGHT JOIN y también la cláusula FULL OUTER JOIN cláusula. Sin embargo, puede emular fácilmente el FULL OUTER JOIN usando el LEFT JOIN cláusula.

Emular la combinación externa completa de SQLite

La siguiente declaración emula el FULL OUTER JOIN cláusula en SQLite:

SELECT d.type,
         d.color,
         c.type,
         c.color
FROM dogs d
LEFT JOIN cats c USING(color)
UNION ALL
SELECT d.type,
         d.color,
         c.type,
         c.color
FROM cats c
LEFT JOIN dogs d USING(color)
WHERE d.color IS NULL;Code language: SQL (Structured Query Language) (sql)

Cómo funciona la consulta.

  • Porque SQLilte no es compatible con RIGHT JOIN cláusula, usamos la LEFT JOIN cláusula en el segundo SELECT declaración en su lugar y cambiar las posiciones de los cats y dogs mesas.
  • La UNION ALL cláusula conserva las filas duplicadas de los conjuntos de resultados de ambas consultas.
  • El WHERE cláusula en el segundo SELECT declaración elimina filas que ya están incluidas en el conjunto de resultados del primer SELECT declaración.

En este tutorial, ha aprendido a usar UNION ALL y LEFT JOIN cláusulas para emular SQLite FULL OUTER JOIN cláusula.