我正在努力实现以下目标。
我有3张桌子:
我查询成分并根据结果,我想要子块或从块或项目中加入一些列。
我设法在我的select语句中有条件地选择1列(name
),但是如果我想要选择多于一列的列,例如SELECT name, material_id
,我收到以下错误:
只允许一个结果 SELECT是表达式的一部分
我在SO上看过很多类似的案例,但无法做到这一点。
SELECT
`crafting_recipes`.`ingredient_id`, `crafting_recipes`.`ingredient_table`,
CASE
WHEN
`crafting_recipes`.`ingredient_table` = 'blocks' THEN
(SELECT `name` FROM `blocks` WHERE `id` = `crafting_recipes`.`ingredient_id`)
ELSE
(SELECT `name` FROM `items` WHERE `id` = `crafting_recipes`.`ingredient_id`)
END
FROM
`crafting_recipes`
WHERE
`crafting_recipes`.`result_id` = 15 AND
`crafting_recipes`.`result_table` = "blocks"
由于不支持在子选择中选择多个列,实现此目的的正确方法是什么?
答案 0 :(得分:3)
我会沿着这些方向去避免重复的相关子查询:
SELECT
cr.`ingredient_id`,
cr.`ingredient_table`,
CASE
WHEN
cr.`ingredient_table` = 'blocks' THEN
b.`name`
ELSE
i.`name`
END as `name`
FROM
`crafting_recipes` cr
LEFT JOIN `blocks` b on b.`id` = cr.`ingredient_id`
LEFT JOIN `items` i on i.`id` = cr.`ingredient_id`
WHERE
cr.`result_id` = 15 AND
cr.`result_table` = "blocks"