sql >> Databasteknik >  >> RDS >> SQLite

SQLite FULL OUTER JOIN-emulering

Sammanfattning :i den här handledningen kommer du att lära dig hur du emulerar SQLite full yttre koppling med UNION och LEFT JOIN klausuler.

Introduktion till SQL FULL YTTRE JOIN klausul

I teorin är resultatet av FULL OUTER JOIN är en kombination av en LEFT JOIN och en RIGHT JOIN . Resultatuppsättningen för den fullständiga yttre kopplingen har NULL värden för varje kolumn i tabellen som inte har en matchande rad i den andra tabellen. För de matchande raderna, FULL OUTER JOIN producerar en enda rad med värden från kolumner i raderna i båda tabellerna.

Följande bild illustrerar resultatet av FULL OUTER JOIN klausul:

Se följande katter och hundar tabeller.

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

Följande sats använder FULL OUTER JOIN sats för att fråga data från hundarna och katter tabeller.

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

Följande visar resultatet av påståendet ovan:

Typ Färg Typ Färg
Jakt Svart Utomhus Svart
Vakt Brun NULL NULL
NULL NULL Inomhus Vit

Tyvärr stöder inte SQLite RIGHT JOIN satsen och även FULL OUTER JOIN klausul. Du kan dock enkelt emulera FULL OUTER JOIN genom att använda LEFT JOIN klausul.

Emulerar SQLite full yttre koppling

Följande sats emulerar FULL OUTER JOIN sats i 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)

Hur frågan fungerar.

  • Eftersom SQLilte inte stöder RIGHT JOIN satsen använder vi LEFT JOIN sats i den andra SELECT sats istället och byt positioner för cats och hundar tabeller.
  • UNION ALL satsen behåller dubblettraderna från resultatuppsättningarna för båda frågorna.
  • VAR sats i den andra SELECT -satsen tar bort rader som redan ingår i resultatuppsättningen för den första SELECT uttalande.

I den här handledningen har du lärt dig hur du använder UNION ALL och LEFT JOIN satser för att emulera SQLite FULL OUTER JOIN klausul.


  1. Spara byte[] i en SQL Server-databas från C#

  2. Hitta icke-numeriska värden i en kolumn i SQL Server

  3. Felvärde finns inte - postgresql INSERT INTO-problem

  4. Reguljära uttryck hitta och ersätt i Postgres