Sammanfattning :i den här handledningen kommer du att lära dig om en speciell typ av join som kallas SQLite self-join som låter dig ansluta tabellen till sig själv.
Observera att du bör vara bekant med INNER JOIN
och LEFT JOIN
klausuler innan du går vidare med denna handledning.
Introduktion till SQLite self-join
Self-join är en speciell typ av joins som låter dig ansluta en tabell till sig själv med antingen LEFT JOIN
eller INNER JOIN
klausul. Du använder självkoppling för att skapa en resultatuppsättning som sammanfogar raderna med de andra raderna i samma tabell.
Eftersom du inte kan referera till samma tabell mer än en i en fråga, måste du använda ett tabellalias för att tilldela tabellen ett annat namn när du använder självanslutning.
Självkopplingen jämför värden för samma eller olika kolumner i samma tabell. Endast ett bord är involverat i självanslutningen.
Du använder ofta självanslutning för att fråga föräldrar/barn-relationer lagrade i en tabell eller för att få löpande totaler.
SQLite självanslutningsexempel
Vi kommer att använda employees
tabell i exempeldatabasen för demonstration.
employees
Tabell lagrar inte bara personaldata utan även organisationsdata. ReportsTo
kolumnen anger rapporteringsrelationen mellan anställda.
Om en anställd rapporterar till en chef, värdet av ReportsTo
kolumnen på den anställdes rad är lika med värdet på EmployeeId
kolumn i chefens rad. Om en anställd inte rapporterar till någon, visas ReportsTo
kolumnen är NULL
.
För att få information om vem som är direktanmälan till vem använder du följande uttalande:
SELECT m.firstname || ' ' || m.lastname AS 'Manager',
e.firstname || ' ' || e.lastname AS 'Direct report'
FROM employees e
INNER JOIN employees m ON m.employeeid = e.reportsto
ORDER BY manager;
Code language: SQL (Structured Query Language) (sql)
Prova det
Uttrycket använde INNER JOIN
klausul för att gå med i employees
till sig själv. employees
tabellen har två roller:anställda och chefer.
Eftersom vi använde INNER JOIN
klausul för att gå med i employees
tabell för sig själv, har resultatuppsättningen inte raden vars hanterarkolumn innehåller en NULL
värde.
Observera att sammanlänkningsoperatorn ||
sammanfogar flera strängar till en enda sträng. I exemplet använder vi sammanlänkningsoperatorn till från de fullständiga namnen på de anställda genom att sammanfoga förnamn, mellanslag och efternamn.
Om du vill fråga VD:n som inte rapporterar till någon, måste du ändra INNER JOIN
sats till LEFT JOIN
klausul i frågan ovan.
Andrew Adams
är VD eftersom han inte anmäler någon.
Du kan använda självanslutningstekniken för att hitta anställda i samma stad som följande fråga:
SELECT DISTINCT
e1.city,
e1.firstName || ' ' || e1.lastname AS fullname
FROM
employees e1
INNER JOIN employees e2 ON e2.city = e1.city
AND (e1.firstname <> e2.firstname AND e1.lastname <> e2.lastname)
ORDER BY
e1.city;
Code language: SQL (Structured Query Language) (sql)
Prova det
Sammanfogningsvillkoret har två uttryck:
e1.city = e2.city
för att se till att båda anställda finns i samma stade.firstname <> e2.firstname AND e1.lastname <> e2.lastname
för att säkerställa atte1
oche2
är inte samma anställd med antagandet att det inte finns anställda som har samma för- och efternamn.
I den här handledningen har vi visat dig hur du använder SQLite självanslutningstekniken för att ansluta en tabell till sig själv.