2010-05-09 16 views
29

Ho uno scenario su cui sono un po 'bloccato. Diciamo che ho un sondaggio sui colori, e ho una tabella per i dati sui colori, e un'altra per le risposte delle persone.Esecuzione di unione interna per più colonne nella stessa tabella

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 

per la visualizzazione voglio scrivere un SELECT che presenta la tabella di risposte, ma utilizzando la colonna color_name da tbColors.

Comprendo il modo "più stupido" per farlo: denominare tbColors tre volte nella sezione FROM, utilizzando un alias diverso per ogni colonna da sostituire.

Come apparirebbe un modo non stupido?

+0

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

risposta

58

Questo mi sembra la strada da percorrere:

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 

Invece di "stupido", Mi permetto che si tratta di una query piuttosto standard. Ciò presuppone anche che tutte le colonne abbiano un valore valido. In caso contrario, sostituire tutti i JOIN INNER con JOIN SINISTRO

+5

Grazie, questo scenario è stato difficile da google per qualche motivo. –

Problemi correlati