2012-07-02 16 views
0

这是我的一个简化查询:MySQL的IFNULL,别名和LEFT JOIN导致一个未知列错误

SELECT `student`.`id`, `student`.`firstname`, `student`.`lastname`, 
IFNULL(`review`.`score`, '0') AS `adminreview_score`, 
`reviewcolor`.`color` AS adminreview_color FROM (`student`) 
LEFT JOIN `review` ON `review`.`student_id` = `student`.`id` AND 
review.reviewtype_id = 13 
LEFT JOIN `reviewcolor` ON `reviewcolor`.`score` = `adminreview_score` 
WHERE `student`.`id` > '0' 

这是错误我得到:

Error Number: 1054 

Unknown column 'adminreview_score' in 'on clause' 

注意,有可能是没有行在review表的情况:

`review`.`student_id` = `student`.`id` AND review.reviewtype_id = 13 

在这种情况下,我想adminreview_score被设置为0,我希望reviewcolor.colorNULL或empry(

谢谢

回答

1

试试这个:(我更换了别名与实际表现。需要注意的是从SELECT子句别名不能在SQL表达式的其余部分使用。)

SELECT `student`.`id`, `student`.`firstname`, `student`.`lastname`, 
IFNULL(`review`.`score`, '0') AS `adminreview_score`, 
`reviewcolor`.`color` AS adminreview_color 
FROM (`student`) 
    LEFT JOIN `review` ON `review`.`student_id` = `student`.`id` AND review.reviewtype_id = 13 
    LEFT JOIN `reviewcolor` ON `reviewcolor`.`score` = IFNULL(`review`.`score`, '0') 
WHERE `student`.`id` > '0' 
1

您可以使用一个变量,试试这个

set @a:=''; 

SELECT `student`.`id`, `student`.`firstname`, `student`.`lastname`, 
IFNULL(@a:=`review`.`score`, @a:=0), 
`reviewcolor`.`color` AS adminreview_color FROM (`student`) 
LEFT JOIN `review` ON `review`.`student_id` = `student`.`id` AND 
review.reviewtype_id = 13 
LEFT JOIN `reviewcolor` ON `reviewcolor`.`score` = @a 
WHERE `student`.`id` > '0' 
+0

非常感谢您的回答。我相信你的回答是对的,但不幸的是我没有启用多重查询模式,所以我只能使用一个查询。否则,我宁愿你提出的解决方案。 –