我有一个名为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声明了解不足以了解情况。
答案 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'