[MySQL] テーブル結合で同じテーブルを2度参照する

MySQL
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

問題

商品テーブル

商品名生産地ID販売地ID
りんご12
ぶどう33
みかん1012

都道府県テーブル

都道府県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するときにそれぞれ別名をつけ、新たにつけた名前を用いて表記することで、期待の結果が得られる。

意外にこういうこと教えてくれるサイトが少なかった

参考

MySQL
スポンサーリンク
黒くまのおむすび🍙

コメント