动态CASE sql语句的问题

时间:2012-05-08 01:47:16

标签: mysql case

我有一个名为hg_liveitems的表,其中包含当前在网站上的项目。 'type'字段可以是水果,蔬菜或树木。水果,树木和蔬菜都有单独的桌子,所有桌子都有相同的字段。基本上我需要一个查询,选择正确的name字段以及要加入的正确表。在那一刻我有这个:

SELECT `hg_liveitems`.`id`, `hg_liveitems`.`price`, `hg_liveitems`.`grabs`, `hg_liveitems`.`quantity`, `hg_liveitems`.`created` 
    CASE `hg_liveitems`.`type` 
        WHEN '1' THEN `hg_fruit`.`name` 
        WHEN '2' THEN `hg_trees`.`name` 
        WHEN '3' THEN `hg_veg`.`name` 
    END AS `name` 
FROM `hg_liveitems` 
INNER JOIN 
    CASE `hg_liveitems`.`type` 
        WHEN '1' THEN `hg_fruit` ON `hg_liveitems`.`produce_id` = `hg_fruit`.`id` 
        WHEN '2' THEN `hg_trees` ON `hg_liveitems`.`produce_id` = `hg_trees`.`id` 
        WHEN '3' THEN `hg_veg` ON `hg_liveitems`.`produce_id` = `hg_veg`.`id` 
    END 
WHERE `hg_liveitems`.`grower_id` = '2' 
AND `hg_liveitems`.`status` < '2' 

但我只是遇到错误,而且我对CASE声明了解不足以了解情况。

1 个答案:

答案 0 :(得分:0)

你不能像这样做一个条件内连接 - 这是一个语法错误。考虑重写为三个外连接和一个where子句来限制结果。

SELECT `hg_liveitems`.`id`, `hg_liveitems`.`price`, `hg_liveitems`.`grabs`, `hg_liveitems`.`quantity`, `hg_liveitems`.`created` 
CASE `hg_liveitems`.`type` 
    WHEN '1' THEN `hg_fruit`.`name` 
    WHEN '2' THEN `hg_trees`.`name` 
    WHEN '3' THEN `hg_veg`.`name` 
END AS `name` 
FROM `hg_liveitems` 
LEFT OUTER JOIN `hg_fruit` ON `hg_liveitems`.`produce_id` = `hg_fruit`.`id`
LEFT OUTER JOIN `hg_trees` ON `hg_liveitems`.`produce_id` = `hg_trees`.`id`
LEFT OUTER JOIN `hg_veg` ON `hg_liveitems`.`produce_id` = `hg_veg`.`id`
WHERE `hg_liveitems`.`grower_id` = '2' 
AND `hg_liveitems`.`status` < '2'