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 viLEFT JOIN
sats i den andraSELECT
sats istället och byt positioner förcats
ochhundar
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örstaSELECT
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.