我有一个场景,我有点坚持。假设我有一个关于颜色的调查,一个用于颜色数据,另一个用于人们的答案。) l, O+ B0 n Q* m
tbColors2 h# Z% D9 u7 U; R
color_code ,color_name blue 2 green yellow' 4 ,'red'tb答案 ' @) E) H* a& fanswer_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列。3 n+ r w. D7 s1 K/ k1 T- \0 A; p
我知道做到这一点的最愚蠢方法:在FROM部分中命名tbColors三次,每列替换使用不同的别名。 * n8 g: R( d3 L3 _一种非愚蠢的方式看起来怎么样?% t, a2 I% W3 }( D' P! I# S! Z' [
# {+ G0 P' ~( p0 ]) m9 ]解决方案: $ O# f, L( F5 Z$ |/ }! A2 G 这似乎是一条路:" ~% I/ P* ~2 H' R T# U+ `5 w
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_nameFROM tbAnswers AS AINNER JOIN tbColors AS C1 ON A.favorite_color = C1.color_codeINNER JOIN tbColors AS C2 ON A.least_favorite_color = C2.color_codeINNER JOIN tbColors AS C3 ON A.color_im_allergic_to = C3.color_code我敢说这是一个非常标准的查询,而不是愚蠢。这也假设所有列都将有效。否则,将是所有的INNER JOIN替换为LEFT JOIN