2010-05-09 7 views
29

Tengo un escenario en el que estoy un poco atascado. Digamos que tengo una encuesta sobre colores, y tengo una tabla para los datos de color y otra para las respuestas de las personas.Realizar una unión interna para múltiples columnas en la misma tabla

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 

Para pantalla que desea escribir un SELECT que presenta la tabla de respuestas, pero utilizando la columna de COLOR_NAME tbColors.

Entiendo la manera "más estúpida" de hacerlo: nombrar tbColors tres veces en la sección FROM, usando un alias diferente para cada columna para reemplazar.

¿Cómo se vería una forma no estúpida?

+0

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

Respuesta

58

Este parece ser el camino a seguir:

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 

En lugar de "estúpida", me atrevería que se trata de una consulta bastante estándar. Esto también supone que todas las columnas tendrán un valor válido. De lo contrario, reemplace todas las UNIONES INTERIORES con UNIONES IZQUIERDAS

+5

Gracias, este escenario fue difícil de google por alguna razón. –

Cuestiones relacionadas