Kæde af relaterede tabeller
Lad os nu antage, at brugerne bor i bestemte byer, og disse byer ligger i forskellige lande. I så fald skal vi bruge allerede tre tabeller til opbevaring: brugere vil være forbundet til byer, og byer - til lande. Samtidig har vi ikke brug for et felt, der forbinder brugere med lande - for brugere vil alligevel være forbundet til lande gennem forbindelsen mellem byer og lande.
Lad os se på vores tabeller. Tabellen med lande:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabellen med byer:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabellen med brugere forbliver uændret:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Forespørgsler
For at hente brugere sammen med deres byer og lande, bliver vi nødt til at lave to joins: den første vil tilføje byer til brugere, og den anden - lande 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 opgaver
Lad os antage, at produkter tilhører en bestemt underkategori, og underkategorier tilhører en bestemt kategori. Beskriv lagringsstrukturen.
Skriv en forespørgsel, der henter produkter, sammen med deres underkategorier og kategorier.
Skriv en forespørgsel, der henter underkategorier sammen med deres kategorier.