Kedja av relaterade tabeller
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 kopplade till städer, och städer - till länder. Samtidigt behöver vi inte ett fält som länkar användare till länder - eftersom användare ändå kommer att vara kopplade 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 deras 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.