Mysql 动态CASE-sql语句的问题

Mysql 动态CASE-sql语句的问题,mysql,case,Mysql,Case,我有一个名为hg_liveitems的表,它保存当前网站上的项目。“类型”字段可以是水果、蔬菜或树木。水果、树木和蔬菜都有单独的桌子,它们都在同一块地里。基本上,我需要一个查询来选择正确的name字段以及要连接的正确表。现在我有了这个: SELECT `hg_liveitems`.`id`, `hg_liveitems`.`price`, `hg_liveitems`.`grabs`, `hg_liveitems`.`quantity`, `hg_liveitems`.`created`

我有一个名为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' 
选择'hg_liveitems`.'id`、'hg_liveitems`.'price`、'hg_liveitems`.'grabs`、'hg_liveitems`.'quantity`、'hg_liveitems`.'created`
案例'hg_liveitems`.'type`
当'1'时,然后是'hg_水果'。'name'
当'2'时,然后是'hg_trees'。'name'
当'3'然后'hg_veg`.'name`
以'name'结尾
来自“hg_liveitems”
内连接
案例'hg_liveitems`.'type`
当'1'时,'hg\u liveitems`.'product\u id`='hg\u fruit`.'id`
当'2'时,则在'hg\u liveitems'上的'hg\u trees'。'product\u id`='hg\u trees`.'id`
当'3'时,则在'hg_liveitems'上的'hg_veg'。'product_id`='hg_veg`.'id`
终止
其中'hg_liveitems`.'grower_id`='2'
和'hg_liveitems`.'status`<'2'

但是我只是遇到了一些错误,而且我对CASE语句的了解还不够,不知道发生了什么。

你不能做这样的条件内部连接-这是一个语法错误。考虑重写为三个外部连接和一个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'
选择'hg_liveitems`.'id`、'hg_liveitems`.'price`、'hg_liveitems`.'grabs`、'hg_liveitems`.'quantity`、'hg_liveitems`.'created`
案例'hg_liveitems`.'type`
当'1'时,然后是'hg_水果'。'name'
当'2'时,然后是'hg_trees'。'name'
当'3'然后'hg_veg`.'name`
以'name'结尾
来自“hg_liveitems”
在'hg\u liveitems'上左外连接'hg\u fruit'。'product\u id`='hg\u fruit`.'id`
在'hg\u liveitems'上左外连接'hg\u trees'。'product\u id`='hg\u trees`.'id`
在'hg\u liveitems'上左外连接'hg\u veg'。'product\u id`='hg\u veg`.'id`
其中'hg_liveitems`.'grower_id`='2'
和'hg_liveitems`.'status`<'2'

您不能执行这样的条件内部联接-这是一个语法错误。考虑重写为三个外部连接和一个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'
选择'hg_liveitems`.'id`、'hg_liveitems`.'price`、'hg_liveitems`.'grabs`、'hg_liveitems`.'quantity`、'hg_liveitems`.'created`
案例'hg_liveitems`.'type`
当'1'时,然后是'hg_水果'。'name'
当'2'时,然后是'hg_trees'。'name'
当'3'然后'hg_veg`.'name`
以'name'结尾
来自“hg_liveitems”
在'hg\u liveitems'上左外连接'hg\u fruit'。'product\u id`='hg\u fruit`.'id`
在'hg\u liveitems'上左外连接'hg\u trees'。'product\u id`='hg\u trees`.'id`
在'hg\u liveitems'上左外连接'hg\u veg'。'product\u id`='hg\u veg`.'id`
其中'hg_liveitems`.'grower_id`='2'
和'hg_liveitems`.'status`<'2'

重复问题:重复问题:谢谢dasblinkenlight,这非常有效。我不确定您是否可以在联接中执行案例,但不确定如何在没有联接的情况下对查询进行排序。谢谢dasblinkenlight,这非常有效。我不确定您是否可以在连接中执行案例,但不确定如何在没有连接的情况下对查询进行排序。