Saistīto tabulu ķēde
Tagad pieņemsim, ka lietotāji dzīvo noteiktās pilsētās, un šīs pilsētas atrodas dažādās valstīs. Šajā gadījumā glabāšanai mums būs nepieciešamas jau trīs tabulas: lietotāji tiks saistīti ar pilsētām, un pilsētas - ar valstīm. Tajā pašā laikā mums nebūs vajadzīgs lauks, kas saista lietotājus ar valstīm - jo lietotāji tik un tā tiks saistīti ar valstīm caur saiti starp pilsētām un valstīm.
Apskatīsim mūsu tabulas. Tabula ar valstīm:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabula ar pilsētām:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabula ar lietotājiem paliks nemainīga:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Pieprasījumi
Lai iegūtu lietotājus kopā ar viņu pilsētām un valstīm, mums būs jāveic divi savienojumi (JOIN): pirmais pievienos pilsētas lietotājiem, un otrais - valstis pilsētām:
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
Praktiskie uzdevumi
Pieņemsim, ka produkti pieder noteiktai apakškategorijai, un apakškategorijas pieder noteiktai kategorijai. Aprakstiet glabāšanas struktūru.
Uzrakstiet vaicājumu, kas iegūs produktus, kopā ar to apakškategorijām un kategorijām.
Uzrakstiet vaicājumu, kas iegūs apakškategorijas kopā ar to kategorijām.