如何用单条PostgreSQL语句批量更新整列NULL值(无WHERE条件)
PostgreSQL 按顺序批量更新列值(无WHERE条件)
要实现将逗号分隔字符串中的值按顺序批量更新到calculation列,可通过拆分字符串+行号关联的方式用单条SQL完成,具体示例如下:
完整SQL语句
UPDATE "table" t SET calculation = s.val FROM ( -- 拆分逗号分隔字符串,为每个值分配行号 SELECT val, row_number() OVER () AS rn FROM unnest(string_to_array('akdak,dndja,jsnajsna', ',')) val ) s -- 为原表生成确定顺序的行号(此处按PKID升序,可按需调整) JOIN ( SELECT PKID, row_number() OVER (ORDER BY PKID) AS rn FROM "table" ) t_rn ON t.PKID = t_rn.PKID AND s.rn = t_rn.rn;
关键说明
- 字符串拆分与行号生成:
string_to_array将逗号分隔的字符串转为数组,unnest把数组拆分为单行数据,再通过row_number()为每个值分配连续序号。
- 原表行号关联:
- 必须为原表生成确定顺序的行号(示例中按
PKID升序排序),否则数据库默认的行顺序不固定,会导致值对应错误。若业务有其他排序需求,直接修改ORDER BY后的字段即可。
- 必须为原表生成确定顺序的行号(示例中按
- 注意事项:
- 确保逗号分隔字符串中的值数量与原表行数完全匹配,否则会出现部分行未更新或更新错误的情况。
- 由于
table是PostgreSQL关键字,需用双引号包裹为"table"。
内容的提问来源于stack exchange,提问作者JMenezes
相关产品推荐
相关产品推荐

