Pythonにおける関連テーブルの連鎖
ここで、ユーザーが特定の都市に住み、それらの都市が異なる国にあるとします。この場合、データを保存するには3つのテーブルが必要になります。ユーザーは都市と関連付けられ、都市は国と関連付けられます。ユーザーと国を直接関連付けるフィールドは必要ありません。なぜなら、ユーザーは都市と国の関連を通じて既に国と関連付けられているからです。
テーブルを見てみましょう。国を表すテーブル:
| id | name |
|---|---|
| 1 | country1 |
| 2 | country2 |
都市を表すテーブル:
| id | name | country_id |
|---|---|---|
| 1 | city1 | 1 |
| 2 | city2 | 1 |
| 3 | city3 | 2 |
ユーザーを表すテーブルは変更なし:
| id | name | city_id |
|---|---|---|
| 1 | user1 | 1 |
| 2 | user2 | 1 |
| 3 | user3 | 2 |
| 4 | user4 | 1 |
| 5 | user5 | 3 |
| 6 | user6 | 2 |
クエリ
ユーザーとその都市、国を一緒に取得するには、2つのJOINを行う必要があります。1つ目は都市をユーザーに結合し、2つ目は国を都市に結合します:
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
実践的なタスク
商品が特定のサブカテゴリに属し、サブカテゴリが特定のカテゴリに属しているとします。データ保存の構造を記述してください。
商品とそのサブカテゴリ、カテゴリを一緒に取得するクエリを書いてください。
サブカテゴリとそのカテゴリを一緒に取得するクエリを書いてください。