PostgreSQL如何用单条UPDATE语句批量更新多行匹配条件的数据
用单条PostgreSQL UPDATE语句实现多条件字段更新
当然可行!PostgreSQL的UPDATE语句支持结合CASE表达式来实现这种多分支的条件更新,完全能用单条语句完成你想要的操作。
具体实现语句
假设你的表名为your_table,对应的更新语句如下:
UPDATE your_table SET ivalue = CASE WHEN featureid IN (1, 2, 4, 6) AND accountid = 90 THEN 100 ELSE ivalue END, bvalue = CASE WHEN featureid IN (7, 8) AND accountid = 90 THEN false ELSE bvalue END WHERE (featureid IN (1, 2, 4, 6) AND accountid = 90) OR (featureid IN (7, 8) AND accountid = 90);
代码解释
CASE表达式:分别针对ivalue和bvalue设置条件逻辑,只有当匹配到指定的featureid和accountid组合时,才修改对应字段的值;不匹配的情况下保持字段原有值,避免误改其他行。WHERE子句:用来过滤出需要更新的目标行,避免对全表所有行执行更新操作,提升语句执行效率,同时确保无关行不会被触及。
更新后的预期结果
执行这条语句后,你的表数据会变成:
| id | updatedat | featureid | accountid | bvalue | ivalue |
|---|---|---|---|---|---|
| 334 | 2018-03-23 00:06:23 | 1 | 90 | 100 | |
| 335 | 2018-03-23 00:06:23 | 2 | 90 | 100 | |
| 337 | 2018-03-23 00:06:23 | 4 | 90 | 100 | |
| 339 | 2018-03-23 00:06:23 | 6 | 90 | 100 | |
| 340 | 2018-03-23 00:06:23 | 7 | 90 | false | |
| 341 | 2018-03-23 00:06:23 | 8 | 90 | false | |
| 342 | 2018-03-23 00:06:23 | 9 | 90 | false |
内容的提问来源于stack exchange,提问作者mridt
相关产品推荐
相关产品推荐

