問題
商品テーブル
商品名 | 生産地ID | 販売地ID |
---|---|---|
りんご | 1 | 2 |
ぶどう | 3 | 3 |
みかん | 10 | 12 |
… | … | … |
都道府県テーブル
都道府県ID | 都道府県名 |
---|---|
1 | 北海道 |
2 | 青森県 |
3 | 岩手県 |
… | … |
例えば上記のようなテーブルがある。
この2つのテーブルを結合して下記のように出力したいとき、
期待値
商品名 | 生産地 | 販売地 |
---|---|---|
りんご | 北海道 | 青森県 |
ぶどう | 岩手県 | 岩手県 |
みかん | 群馬県 | 千葉県 |
… | … | … |
“生産地”列と”販売地”列でそれぞれ同じ”都道府県名テーブル”を参照する必要がある。
しかし、下記のように普通に結合する時の書き方をすると、生産地の都道府県と販売地の都道府県の区別ができず、#1066 - Not unique table/alias :'都道府県'
(生産地IDと結合した都道府県テーブルと、販売地IDと結合した都道府県テーブル、どっちを参照したらよいかわからないよエラー)になってしまう。
// × うまくいかない
SELECT 商品テーブル.商品名,
都道府県テーブル.都道府県名,
都道府県テーブル.都道府県名
FROM 商品テーブル
LEFT JOIN 都道府県テーブル
ON 商品テーブル.生産地ID = 都道府県テーブル.都道府県ID
LEFT JOIN 都道府県テーブル
ON 商品テーブル.販売地ID = 都道府県テーブル.都道府県ID
解決策
複数回参照するテーブル名を、AS
を用いて別名にする
// ○ うまくいく
SELECT 商品テーブル.商品名,
生産地テーブル.生産地,
販売地テーブル.販売地
FROM 商品テーブル
LEFT JOIN 都道府県テーブル AS 生産地テーブル
ON 商品テーブル.生産地ID = 生産地テーブル.都道府県ID
LEFT JOIN 都道府県テーブル AS 販売地テーブル
ON 商品テーブル.販売地ID = 販売地テーブル.都道府県ID
都道府県テーブルをJOIN
するときにそれぞれ別名をつけ、新たにつけた名前を用いて表記することで、期待の結果が得られる。
意外にこういうこと教えてくれるサイトが少なかった
コメント