PostgreSQL如何根据ID条件更新指定列 CASE语法错误如何解决
错误原因
你编写的SQL不符合PostgreSQL的UPDATE语法规则:SET子句中每个赋值项必须为列名 = 值的结构,CASE表达式只能用来生成值,不能直接用来选择要更新的列,也不能在CASE内部写赋值语句,因此触发语法报错。
正确实现代码
你可以对每个需要更新的数值列单独写CASE判断,符合条件时执行+1操作,不符合时保留原值即可:
UPDATE my_table SET my_date = now(), id_1_number = CASE WHEN _id = id_1 THEN id_1_number + 1 ELSE id_1_number END, id_2_number = CASE WHEN _id = id_2 THEN id_2_number + 1 ELSE id_2_number END WHERE user_id = _user_id;
逻辑说明
- 上述语句只会更新匹配
user_id = _user_id的行 - 匹配到_id等于id_1时,仅id_1_number加1,id_2_number保持原值不变
- 匹配到_id等于id_2时,仅id_2_number加1,id_1_number保持原值不变
- PostgreSQL会自动优化无变化的列赋值,不会产生额外的写入开销
内容的提问来源于stack exchange,提问作者Code Guru
相关产品推荐
相关产品推荐

