Problem:
Du vil gerne kombinere data fra mere end to tabeller med kun én SELECT-sætning.
Eksempel:
Der er fire tabeller i vores database:student , teacher , subject og learning .
student tabel indeholder data i følgende kolonner:id , first_name og last_name .
| id | fornavn | efternavn |
|---|---|---|
| 1 | Tom | Møller |
| 2 | John | Forår |
| 3 | Lisa | Williams |
| 4 | Ellie | Barker |
| 5 | James | Moore |
teacher tabel indeholder data i følgende kolonner:id , first_name , last_name og subject .
| id | fornavn | efternavn |
|---|---|---|
| 1 | Milano | Smith |
| 2 | Charles | Davis |
| 3 | Mærk | Moore |
subject tabel indeholder data i følgende kolonner:id og name .
| id | navn |
|---|---|
| 1 | Engelsk |
| 2 | Kunst |
| 3 | Musik |
Til sidst, learning tabel indeholder data i følgende kolonner:id , mark , subject_id , student_id og teacher_id .
| id | marker | emne-id | student_id | teacher_id |
|---|---|---|---|---|
| 1 | 4 | 1 | 2 | 1 |
| 2 | 5 | 2 | 3 | 2 |
| 3 | 4 | 3 | 1 | 3 |
| 4 | 3 | 2 | 1 | 2 |
| 5 | 2 | 3 | 5 | 3 |
| 6 | 3 | 3 | 4 | 2 |
Vi vil gerne vide, hvilke elever der studerer engelsk, musik og kunst, samt hvilke lærere der instruerer disse klasser. Vælg faget, efternavnet på den studerende, der tager det pågældende kursus, og efternavnet på den lærer, der leverer det pågældende kursus.
Løsning:
Brug flere JOIN s i din forespørgsel:
SELECT l.name AS subject_name, t.last_name AS student_last_name, st.last_name AS teacher_last_name FROM learning AS l JOIN subject s ON l.subject_id=s.id JOIN student st ON l.student_id=st.id JOIN teacher t ON l.teacher_id=t.id;
Denne forespørgsel returnerer poster med navn på kursusfaget og efternavne på elever og lærere:
| emnenavn | s_efternavn | t_efternavn |
|---|---|---|
| Musik | Moore | Møller |
| Kunst | Davis | Møller |
| Engelsk | Smith | Forår |
| Kunst | Davis | Williams |
| Musik | Davis | Barker |
| Musik | Moore | Moore |
Disse data kommer fra tre tabeller, så vi er nødt til at samle alle disse tabeller for at få den information, vi søger.
Diskussion:
Hvis du gerne vil kombinere data gemt i flere (mere end to) tabeller, skal du bruge JOIN operatør flere gange. Først forbinder du to tabeller, som du plejer (ved hjælp af JOIN , LEFT JOIN , RIGHT JOIN , eller FULL JOIN , som passende). JOIN operation opretter en "virtuel tabel", der gemmer kombinerede data fra de to tabeller. I vores eksempel er resultattabellen en kombination af learning og subject tabeller.
Det næste trin er at forbinde denne resultattabel med den tredje tabel (i vores eksempel, student ). Dette er ligesom en almindelig JOIN :du tilslutter dig den "virtuelle tabel" og den tredje tabel med en passende betingelse. Denne betingelse bør generelt omfatte en eller flere kolonner fra den ekstra tabel (student ) og en eller flere kolonner fra den "virtuelle tabel". I vores eksempel refererer vi til student tabel i den anden JOIN-tilstand.
På dette tidspunkt har vi en ny virtuel tabel med data fra tre tabeller. Det sidste trin er at tilføje data fra den fjerde tabel (i vores eksempel, teacher ). og deltag ved hjælp af nøglen fra disse tabeller (i vores eksempel, id fra teacher tabel og teacher_id fra learning tabel).
Hvis du skal deltage i et andet bord, kan du bruge en anden JOIN operatør med en passende betingelse i ON-klausulen. I teorien kan du deltage i så mange borde, du vil.