SQLite中使用CASE语句向多列插入数据出现语法错误如何解决
问题原因
你遇到的语法错误有两个核心诱因:
- SQL中的
CASE是单值表达式,单次执行只能返回一个值,你在THEN后直接写三个逗号分隔的列值属于语法不支持的写法,解析器读到未闭合的CASE后的逗号时就会抛出你遇到的报错。 - 你的
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
相关产品推荐
相关产品推荐

