Ketting van gekoppelde tabellen in Python
Stel dat gebruikers in bepaalde steden wonen, en deze steden zich in verschillende landen bevinden. In dat geval hebben we drie tabellen nodig voor opslag: gebruikers zullen worden gekoppeld aan steden, en steden aan landen. We hebben geen direct koppelingsveld nodig tussen gebruikers en landen - omdat gebruikers toch al via de steden aan landen worden gekoppeld.
Laten we naar onze tabellen kijken. De tabel met landen:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
De tabel met steden:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
De tabel met gebruikers blijft ongewijzigd:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Query's
Om gebruikers op te halen samen met hun steden en landen, moeten we twee joins maken: de eerste voegt steden toe aan gebruikers, en de tweede voegt landen toe aan steden:
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
Praktische opdrachten
Stel dat producten tot een bepaalde subcategorie behoren, en subcategorieën tot een bepaalde categorie. Beschrijf de opslagstructuur.
Schrijf een query die producten ophaalt, samen met hun subcategorieën en categorieën.
Schrijf een query die subcategorieën ophaalt samen met hun categorieën.