Ketjutettu taulukoiden yhteys
Oletetaan nyt, että käyttäjät asuvat tietyissä kaupungeissa, ja nämä kaupungit sijaitsevat eri maissa. Tällöin tallentamiseen tarvitsemme kolme taulukkoa: käyttäjät yhdistetään kaupunkeihin, ja kaupungit - maihin. Samalla emme tarvitse käyttäjien ja maiden välistä yhteyskenttää - sillä käyttäjät tulevat olemaan yhteydessä maihin kaupunkien ja maiden kautta.
Katsotaan taulukkojamme. Taulukko maiden kanssa:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
Taulukko kaupungeilla:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
Taulukko käyttäjillä pysyy muuttumattomana:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
Kyselyt
Jotta voimme hakea käyttäjät yhdessä heidän kaupunkien ja maiden kanssa, meidän on tehtävä kaksi liitosta: ensimmäinen liittää kaupungit käyttäjiin, ja toinen - maat kaupunkeihin:
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
Käytännön tehtävät
Oletetaan, että tuotteet kuuluvat tiettyyn alalakentään, ja alalakentät kuuluvat tiettyyn pääluokkaan. Kuvaile tallennusrakenne.
Kirjoita kysely, joka hakee tuotteet, yhdessä niiden alalakenttien ja pääluokkien kanssa.
Kirjoita kysely, joka hakee alalakentät yhdessä niiden pääluokkien kanssa.