2010-05-09 4 views
29

Ich habe ein Szenario, auf dem ich ein bisschen fest bin. Nehmen wir an, ich habe eine Umfrage über Farben, und ich habe eine Tabelle für die Farbdaten und eine andere für die Antworten der Leute.Ausführen von Inner Join für mehrere Spalten in der gleichen Tabelle

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 

Für die Anzeige möchte ich eine SELECT schreiben, die die Antworten Tabelle zeigt aber die color_name Spalte von tbColors verwenden.

Ich verstehe die "dümmste" Möglichkeit, es zu tun: tbColors drei Mal im FROM-Abschnitt benennen, mit einem anderen Alias ​​für jede zu ersetzende Spalte.

Wie würde ein nicht-dummer Weg aussehen?

+0

bezogen http://stackoverflow.com/questions/4267929/whats-the-best-way-to-join-on-the-same-table-twice?rq=1 – nawfal

Antwort

58

Dies scheint der Weg zu gehen:

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 

Anstatt „dumm“, würde ich riskieren, dass dies eine ziemlich Standard-Abfrage ist. Dies setzt auch voraus, dass alle Spalten einen gültigen Wert haben. Andernfalls ersetzen Sie alle INNER JOINs durch LINKE VERBINDUNGEN

+5

Danke, dieses Szenario war aus irgendeinem Grund schwer zu googeln. –

Verwandte Themen