web-dev-qa-db-ja.com

同じテーブル内の複数の列に対する内部結合の実行

私は少し立ち往生しているシナリオがあります。色に関する調査があり、色データ用のテーブルと人々の回答用のテーブルがあるとします。

tbColors

color_code , color_name
     1     , 'blue'
     2     , 'green'
     3     , 'yellow'
     4     , 'red'

tbAnswers

answer_id  ,  favorite_color   ,   least_favorite_color   ,  color_im_allergic_to
    1      ,         1          ,         2                            3  
    2      ,         3          ,         1                            4
    3      ,         1          ,         1                            2
    4      ,         2          ,         3                            4

表示のために、tbColorsのcolor_name列を使用して、回答テーブルを表示するSELECTを記述します。

「最も愚かな」方法を理解しています:FROMセクションでtbColorsに3回名前を付け、各列に異なるエイリアスを使用して置き換えます。

愚かではない方法はどのように見えるでしょうか?

38
Frankie Simon

これは行く方法のようです:

SELECT
  A.answer_id
  ,C1.color_name AS favorite_color_name
  ,C2.color_name AS least_favorite_color_name
  ,C3.color_name AS color_im_allergic_to_name
FROM tbAnswers AS A
INNER JOIN tbColors AS C1
  ON A.favorite_color = C1.color_code
INNER JOIN tbColors AS C2
  ON A.least_favorite_color = C2.color_code
INNER JOIN tbColors AS C3
  ON A.color_im_allergic_to = C3.color_code

「愚かな」というよりは、これはかなり標準的なクエリだと思います。また、これはすべての列に有効な値があることを前提としています。それ以外の場合、すべての内部結合を左結合に置き換えます

76
BradBrening