Kjede av relaterte tabeller
La oss nå si at brukere bor i bestemte byer, og disse byene ligger i forskjellige land. I så fall trenger vi allerede tre tabeller for lagring: brukere vil være koblet til byer, og byer - til land. Samtidig trenger vi ikke et relasjonsfelt mellom brukere og land - for brukere vil uansett være koblet til land gjennom relasjonen mellom byer og land.
La oss se på tabellene våre. Tabellen med land:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabellen med byer:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabellen med brukere forblir uendret:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Spørringer
For å hente brukere sammen med deres byer og land, må vi gjøre to joins: den første vil koble byer til brukere, og den andre - land til byer:
SELECT
users.name,
cities.name as city_name,
countries.name as country_name
FROM
users
LEFT JOIN cities ON cities.id=users.city_id
LEFT JOIN countries ON countries.id=cities.country_id
Praktiske oppgaver
La oss si at produkter tilhører en bestemt underkategori, og underkategorier tilhører en bestemt kategori. Beskriv lagringsstrukturen.
Skriv en spørring som henter produkter, sammen med deres underkategorier og kategorier.
Skriv en spørring som henter underkategorier sammen med deres kategorier.