2010-05-09 39 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