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 JOINsatsen använder viLEFT JOINsats i den andraSELECTsats istället och byt positioner förcatsochhundartabeller. UNION ALLsatsen 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örstaSELECTuttalande.
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.