Problem:
Du vill sammanfoga tabeller i flera kolumner genom att använda en primär sammansatt nyckel i en tabell och en främmande sammansatt nyckel i en annan.
Exempel:
Vår databas har tre tabeller som heter student , enrollment och payment . student tabellen har data i följande kolumner:id (primär nyckel), first_name och last_name .
| id | förnamn | efternamn |
|---|---|---|
| 1 | Ellie | Willson |
| 2 | Tom | Brun |
| 3 | Sandra | Miller |
enrollment tabellen har data i följande kolumner:primärnyckel (student_id och course_code ), is_active och start_date .
| student_id | kurskod | är_aktiv | startdatum |
|---|---|---|---|
| 1 | GD03 | sant | 2020-01-20 |
| 1 | AP01 | falskt | 2020-03-10 |
| 2 | SL01 | sant | 2020-05-05 |
| 3 | SL01 | sant | 2020-06-01 |
payment tabellen har data i följande kolumner:främmande nyckel (student_id och course_code , de primära nycklarna för enrollment tabell), status och amount .
| student_id | kurskod | status | belopp |
|---|---|---|---|
| 1 | GD03 | betald | 230 |
| 1 | AP01 | väntande | 100 |
| 2 | SL01 | väntande | 80 |
| 3 | SL01 | väntande | 110 |
Låt oss visa varje elevs namn, kurskod och betalningsstatus och belopp.
Lösning:
SELECT s.last_name, s.first_name, p.course_code, p.status, p.amount FROM enrollment e JOIN student s ON s.id=e.student_id JOIN payment p ON p.course_code=e.course_code AND p.student_id=e.student_id;
| efternamn | förnamn | kurskod | status | belopp |
|---|---|---|---|---|
| Willson | Ellie | GD03 | betald | 230 |
| Willson | Ellie | AP01 | väntande | 100 |
| Brun | Tom | SL01 | väntande | 80 |
| Miller | Sandra | SL01 | väntande | 110 |
Diskussion:
Om du vill få data lagrade i tabeller sammanfogade av en sammansatt nyckel som är en primärnyckel i en tabell och en främmande nyckel i en annan tabell, använd helt enkelt ett sammanfogningsvillkor på flera kolumner.
I en sammanfogad tabell (i vårt exempel, enrollment ), har vi en primärnyckel byggd av två kolumner (student_id och course_code ). I den andra tabellen (payment ), har vi kolumner som är en främmande sammansatt nyckel (student_id och course_code ). Hur kan vi slå samman tabellerna med dessa sammansatta nycklar?
Lätt! Vi behöver bara använda en JOIN sats med mer än ett villkor genom att använda AND-operatorn efter det första villkoret. I vårt exempel använder vi detta villkor:
p.course_code=e.course_code AND p.student_id=e.student_id
I den första delen använder vi student_id kolumnen från enrollment tabell och student_id från payment tabell. I nästa tillstånd får vi course_code kolumnen från enrollment tabell och course_code från payment bord.
Observera att student_id och course_code kolumner bildar en primärnyckel i enrollment tabell. Därför används de i payment tabell som en främmande nyckel.