在同一个表中为多个列执行内部联接

Fra*_*mon 39 sql oracle join inner-join

我有一个场景,我有点卡住了.假设我有一个关于颜色的调查,我有一个用于颜色数据的表,另一个用于人们的答案.

tbColors

color_code , color_name
     1     , 'blue'
     2     , 'green'
     3     , 'yellow'
     4     , 'red'
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

为了显示,我想编写一个SELECT,它显示了答案表,但使用了tbColors中的color_name列.

我理解"最愚蠢"的方法:在FROM部分中命名tbColors三次,为每个要替换的列使用不同的别名.

一个非愚蠢的方式怎么样?

Bra*_*ing 78

这似乎是要走的路:

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
Run Code Online (Sandbox Code Playgroud)

我冒昧认为这是一个非常标准的查询,而不是"愚蠢".这也假设所有列都具有有效值.否则,用LEFT JOIN替换所有INNER JOIN

  • 谢谢,由于某种原因,这种情况很难谷歌. (7认同)