Kedja av länkade tabeller i Python
Låt oss nu anta att användare bor i vissa städer, och dessa städer ligger i olika länder. I så fall kommer vi att behöva tre tabeller för lagring: användare kommer att vara länkade till städer, och städer till länder. Samtidigt behöver vi inte ett fält för att länka användare till länder - eftersom användare ändå kommer att vara länkade till länder genom kopplingen mellan städer och länder.
Låt oss titta på våra tabeller. Tabellen med länder:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabellen med städer:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabellen med användare förblir oförändrad:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Frågor
För att hämta användare tillsammans med sina städer och länder måste vi göra två kopplingar: den första kommer att koppla städer till användare, och den andra - länder till städer:
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
Praktiska uppgifter
Låt oss anta att produkter tillhör en viss underkategori, och underkategorier tillhör en viss kategori. Beskriv lagringsstrukturen.
Skriv en fråga som hämtar produkter, tillsammans med deras underkategorier och kategorier.
Skriv en fråga som hämtar underkategorier tillsammans med deras kategorier.