sql >> Databáze >  >> RDS >> SQLite

SQLite FULL OUTER JOIN emulace

Shrnutí :v tomto tutoriálu se naučíte, jak emulovat SQLite úplné vnější spojení pomocí UNION a LEFT JOIN klauzule.

Úvod do SQL FULL OUTER JOIN klauzule

Teoreticky výsledek FULL OUTER JOIN je kombinací LEFT JOIN a RIGHT JOIN . Výsledná sada úplného vnějšího spojení má NULL hodnoty pro každý sloupec tabulky, který nemá odpovídající řádek v jiné tabulce. Pro odpovídající řádky FULL OUTER JOIN vytvoří jeden řádek s hodnotami ze sloupců řádků v obou tabulkách.

Následující obrázek ukazuje výsledek FULL OUTER JOIN klauzule:

Viz následující cats a dogs tabulky.

-- 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)

Následující příkaz používá FULL OUTER JOIN klauzule k dotazování na data od dogs a cats tabulky.

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

Následující ukazuje výsledek výše uvedeného příkazu:

Typ Barva Typ Barva
Lov Černá Venkovní Černá
Stráž Hnědá NULL NULL
NULL NULL Uvnitř Bílá

Bohužel SQLite nepodporuje RIGHT JOIN klauzule a také FULL OUTER JOIN doložka. Můžete však snadno emulovat FULL OUTER JOIN pomocí LEFT JOIN doložka.

Emulace úplného vnějšího spojení SQLite

Následující příkaz emuluje FULL OUTER JOIN klauzule v 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)

Jak dotaz funguje.

  • Protože SQLilte nepodporuje RIGHT JOIN klauzule, používáme LEFT JOIN klauzule ve druhém SELECT a změňte pozice cats a dogs tabulky.
  • UNION ALL klauzule zachovává duplicitní řádky ze sad výsledků obou dotazů.
  • WHERE klauzule ve druhém SELECT příkaz odstraní řádky, které již byly zahrnuty v sadě výsledků prvního SELECT prohlášení.

V tomto tutoriálu jste se naučili používat UNION ALL a LEFT JOIN klauzule k emulaci SQLite FULL OUTER JOIN doložka.


  1. Upgrade vaší databáze na PostgreSQL verze 10 – Co byste měli vědět

  2. Omezení klauzule IN na serveru SQL Server

  3. Heroku pg:pull se nepodařilo naplnit schéma

  4. MySQL - Jak vybrat data podle délky řetězce