如何在SQLite3中批量更新指定列的所有行数据?
批量更新SQLite表的name列
首先看你的表结构和现有数据:
CREATE TABLE example ( id integer, name text ); SELECT COUNT(*) FROM example; >> 10 SELECT * FROM example; ...> id name -- -------- 1 2 3 4 5 6 7 8 9 10
需求是将name列批量更新为(A, B, C, D, E, F, G, H, I, J),无需逐行编写UPDATE语句,以下是几种高效实现方式:
方法一:利用ASCII码直接生成对应字符
由于你的id从1到10,刚好对应字母A(ASCII码65)到J(ASCII码74),可以直接用CHAR()函数计算生成:
UPDATE example SET name = CHAR(64 + id);
这种方式最简单,适合id连续且与目标字母顺序完全匹配的场景。
方法二:用CTE构建映射关系后关联更新
如果后续id与字母的对应关系可能调整,或者需要更灵活的映射规则,可以先用CTE定义id和目标name的对应表,再关联更新:
WITH name_mapping AS ( SELECT 1 AS id, 'A' AS name UNION ALL SELECT 2, 'B' UNION ALL SELECT 3, 'C' UNION ALL SELECT 4, 'D' UNION ALL SELECT 5, 'E' UNION ALL SELECT 6, 'F' UNION ALL SELECT 7, 'G' UNION ALL SELECT 8, 'H' UNION ALL SELECT 9, 'I' UNION ALL SELECT 10, 'J' ) UPDATE example SET name = name_mapping.name FROM name_mapping WHERE example.id = name_mapping.id;
这种写法扩展性强,后续修改对应关系只需调整CTE中的内容即可。
方法三:使用CASE WHEN语句
如果不想用CTE,也可以直接用CASE WHEN匹配每个id对应的name:
UPDATE example SET name = CASE id WHEN 1 THEN 'A' WHEN 2 THEN 'B' WHEN 3 THEN 'C' WHEN 4 THEN 'D' WHEN 5 THEN 'E' WHEN 6 THEN 'F' WHEN 7 THEN 'G' WHEN 8 THEN 'H' WHEN 9 THEN 'I' WHEN 10 THEN 'J' END;
这种写法直观,但数据量较大时,不如前两种方法简洁。
内容的提问来源于stack exchange,提问作者Michael An
相关产品推荐
相关产品推荐

