sql - 我如何在 Postgres 中更新除一行之外的所有行
问题描述
我有桌子:-
| num | name | value |
----------------------------------
| 1 | name1 | 1 |
| 2 | name2 | 1 |
| 1 | name1 | 1 |
| 4 | name4 | 2 |
| 1 | name1 | 3 |
我想用 5 更新每个值列,除了列 num 和 name 都相同的一行
就像我试过如果有人纠正它
UPDATE table t
SET
value = 5
FROM table t2
WHERE
t1.num = t2.num AND
t1.name = t2.name
但它更新了所有行我希望单行(任何人)不更新
解决方案
使用row_number()
:
UPDATE table t
SET value = 5
FROM (SELECT t2.*, ROW_NUMBER() OVER (PARTITION BY num, name ORDER BY num) as seqnum
FROM table t2
) t2
WHERE t.num = t2.num AND
t.name = t2.name AND
t2.seqnum > 1;
推荐阅读
- javascript - 角度 1 简单路由 - 数据绑定不起作用
- r - 从 R 中平均的模型中提取全平均系数
- python - Python TypeError - Expected bytes but got 'str' when trying to created signature
- c# - 如何获取从开始到另一个列表C#的特定项目的项目列表
- angular - 用户代理嗅探分配模板时出错
- javascript - 排除正则表达式匹配组中的特殊字符
- javascript - Angular 2搜索(添加项目,删除项目,选择所有项目到数组)依赖
- jquery - jquery点击更改背景图片url功能
- stripe-payments - 修改 Stripe 订阅状态
- macos - Vim 似乎没有从安装在 .vim/pack 文件夹中的包中加载语法