SELECT语句中的条件子查询

时间:2010-11-14 15:48:12

标签: sqlite join conditional subquery

我正在努力实现以下目标。

我有3张桌子:

  1. 成分
  2. 我查询成分并根据结果,我想要子块或从块或项目中加入一些列。

    我设法在我的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"
    

    由于不支持在子选择中选择多个列,实现此目的的正确方法是什么?

1 个答案:

答案 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"