我有一个场景,我有点卡住了。假设我有关于颜色的调查,我有一个用于颜色数据的表,另一个用于人们的答案。
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,它显示了答案表,但使用了tbColors中的color_name列。
我理解“最愚蠢”的方法:在FROM部分中命名tbColors三次,为每个要替换的列使用不同的别名。
非愚蠢的方式怎么样?
答案 0 :(得分:73)
这似乎是要走的路:
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
我冒昧认为这是一个非常标准的查询,而不是“愚蠢”。这也假设所有列都具有有效值。否则,用LEFT JOIN替换所有INNER JOIN