Řetězec spojených tabulek
Nyní předpokládejme, že uživatelé žijí v určitých městech, a tato města se nacházejí v různých zemích. V takovém případě pro ukládání budeme potřebovat už tři tabulky: uživatelé budou spojeni s městy, a města - se zeměmi. Přitom nebudeme potřebovat pole pro spojení uživatelů se zeměmi - protože uživatelé budou stejně spojeni se zeměmi prostřednictvím spojení měst a zemí.
Podívejme se na naše tabulky. Tabulka se zeměmi:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Tabulka s městy:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Tabulka s uživateli zůstane nezměněna:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Dotazy
Abychom získali uživatele spolu s jejich městy a zeměmi, budeme muset provést dva join: první připojí města k uživatelům, a druhý - země k městů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
Praktické úlohy
Předpokládejme, že produkty patří do určité podkategorie, a podkategorie patří do určité kategorie. Rozepište strukturu ukládání.
Napište dotaz, který získá produkty, spolu s jejich podkategoriemi a kategoriemi.
Napište dotaz, který získá podkategorie spolu s jejich kategoriemi.