2010-05-09 23 views
29

Tôi có một kịch bản mà tôi đang gặp khó khăn. Giả sử tôi có một cuộc khảo sát về màu sắc và tôi có một bảng cho dữ liệu màu và một bảng cho câu trả lời của mọi người.Thực hiện tham gia bên trong cho nhiều cột trong cùng một bảng

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 

Đối với màn hình Tôi muốn viết một SELECT mà trình bày bảng câu trả lời nhưng sử dụng cột COLOR_NAME từ tbColors.

Tôi hiểu cách "ngu ngốc nhất" để thực hiện: đặt tên tbColors ba lần trong phần TỪ, sử dụng bí danh khác nhau cho từng cột để thay thế.

Làm thế nào một cách không ngu xuẩn?

+0

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

Trả lời

58

Điều này có vẻ như con đường để đi:

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 

Thay vì "ngu ngốc", tôi muốn mạo hiểm rằng đây là một câu hỏi khá chuẩn. Điều này cũng giả định rằng tất cả các cột sẽ có giá trị hợp lệ. Nếu không, hãy thay thế tất cả THAM GIA INNER bằng LEFT JOINs

+5

Cảm ơn, kịch bản này rất khó để google vì một lý do nào đó. –

Các vấn đề liên quan