如何在PostgreSQL中为表的列填充不同值?
为现有数据表的ID列批量填充不同值的SQL方法
问题描述
现有数据表结构及数据如下:
ID | Text ===================== | 'a' | 'b' | 'c'
需要修改为:
ID | Text ===================== 3 | 'a' 5 | 'b' 9 | 'c'
注:ID列的数值仅为示例,可任意设置。
已知INSERT INTO需要逐行写入所有数据,UPDATE会为列填充相同值,想找更合适的批量赋值方法。
解决方案
方法1:带条件的UPDATE语句
如果可以通过Text列的唯一值区分每行,直接用CASE语句批量设置不同ID:
UPDATE 你的表名 SET ID = CASE Text WHEN 'a' THEN 3 WHEN 'b' THEN 5 WHEN 'c' THEN 9 END;
这种方式适合行数不多、每行有唯一标识列的场景,一次执行即可完成所有行的ID更新。
方法2:使用自增变量批量赋值(以MySQL为例)
如果ID只需要唯一递增、不需要指定具体数值,用自增变量自动生成:
SET @id := 0; UPDATE 你的表名 SET ID = @id := @id + 2; -- 步长可调整,比如+1得到连续值,+2得到间隔值
执行这两句后,ID列会被赋予连续的递增数值,初始值和步长可按需修改。
方法3:基于唯一标识列更新(若表有主键/行号)
如果表存在主键、自增列等唯一标识列,可基于这些列精准更新:
UPDATE 你的表名 SET ID = CASE WHEN 唯一标识列 = 1 THEN 3 WHEN 唯一标识列 = 2 THEN 5 WHEN 唯一标识列 = 3 THEN 9 END;
内容的提问来源于stack exchange,提问作者Hochy_Marmeladky
相关产品推荐
相关产品推荐

