2

我有一个名为 hg_liveitems 的表,其中包含当前网站上的项目。“类型”字段可以是水果、蔬菜或树木。水果、树木和蔬菜都有单独的表格,它们都具有相同的字段。基本上我需要一个查询来选择正确的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 语句的了解还不够,无法知道发生了什么。

4

1 回答 1

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'
于 2012-05-08T01:52:20.630 回答