2010-05-09 50 views
29

我有一个场景,我有点卡住了。比方说,我有一个关于颜色的调查,我有一个表格用于颜色数据,另一个表格用于人们的答案。为同一表中的多列执行内连接

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 

为了显示我想要写一个SELECT呈现答案表,但使用COLOR_NAME列从tbColors。

我明白“最愚蠢的”方法:在FROM部分命名tbColors三次,每个列使用不同的别名替换。

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

+0

相关http://stackoverflow.com/questions/4267929/whats-the-best-way-to-join-on-the-same-table-twice?rq=1 – nawfal 2013-09-02 21:14:41

回答

58

这似乎是要走的路:

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 

,而不是“傻”,我想冒昧地说,这是一个非常标准的查询。这也假设所有的列都会有一个有效的值。否则,用左连接替换所有INNER JOINs

+5

谢谢,出于某种原因,这种情况很难谷歌。 – 2010-05-09 18:39:22

相关问题