You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中使用CASE语句向多列插入数据出现语法错误如何解决

问题原因

你遇到的语法错误有两个核心诱因:

  1. SQL中的CASE是单值表达式,单次执行只能返回一个值,你在THEN后直接写三个逗号分隔的列值属于语法不支持的写法,解析器读到未闭合的CASE后的逗号时就会抛出你遇到的报错。
  2. 你的INSERT语句没有关联源表parts,无法直接读取parts.Machine的字段值,即使修复CASE语法也无法正常执行。
修复方案

方案1:每个目标列单独写CASE语句

这是最直观的适配写法,每个字段对应一个CASE判断:

INSERT INTO machine_info (MachineType, MaxPower, Frequency)
SELECT 
  CASE Machine
    WHEN 'A' THEN 'Diode'
    WHEN 'B' THEN 'AC'
    WHEN 'C' THEN NULL
  END,
  CASE Machine
    WHEN 'A' THEN 200
    WHEN 'B' THEN 500
    WHEN 'C' THEN 500
  END,
  CASE Machine
    WHEN 'A' THEN 60
    WHEN 'B' THEN 50
    WHEN 'C' THEN NULL
  END
FROM parts;

如果你是在触发器中使用这段逻辑,不需要写FROM parts,直接将Machine替换为触发器的NEW关键字引用即可。

方案2:映射表JOIN(更易维护)

如果对应规则较多,可以用值表做映射,避免重复写多次CASE:

INSERT INTO machine_info (MachineType, MaxPower, Frequency)
SELECT map.type, map.power, map.freq
FROM parts
LEFT JOIN (
  VALUES
    ('A', 'Diode', 200, 60),
    ('B', 'AC', 500, 50),
    ('C', NULL, 500, NULL)
) AS map(machine_code, type, power, freq)
ON parts.Machine = map.machine_code;

内容的提问来源于stack exchange,提问作者Meng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:06:03