PostgreSql中更新指定的某些行
来源:互联网 发布:.xyz域名价值 编辑:程序博客网 时间:2024/06/02 04:31
当在做测试或者需求就是需要更新10条数据中的第二行到第八行的数据,那应该这么办?开始的时候我也是百思不得其解,也就是知道了ctid用法才解决了类似的问题。
下面就直接说一下例子,
一个简单的表mytest7,
"ctid" "id""name_1" "name_2""name_3"
"(0,1)" "1""name_11" "name_21""name_31"
"(0,2)" "2""name_12" "name_22""name_32"
"(0,3)" "3""name_13" "name_23""name_33"
"(0,4)" "4""name_14" "name_24""name_34"
"(0,5)" "5""name_15" "name_25""name_35"
"(0,6)" "6""name_16" "name_26""name_36"
"(0,7)" "7""name_17" "name_27""name_37"
"(0,8)" "8""name_18" "name_28""name_38"
"(0,9)" "9""name_19" "name_29""name_39"
"(0,10)" "10""name_110" "name_210""name_310"
如果选择需要将第2行到第4行数据的name_3字段的值全部更新为‘name333’
update mytest7 set name_3 = 'name333' where ctid>='(0,2)'::tid and ctid <= '(0,4)'::tid;
当然,在这份表数据中并不一定要使用ctid,而使用ctid的情况下是当一个表中的数据没有能力区分与其他行的字段或者组合字段时而使用的,例如表mytest8的数据情况,
"id" "name_1""name_2" "name_3"
"1" "name_11""name_22" "name_33"
"1" "name_11""name_22" "name_33"
"1" "name_11""name_22" "name_33"
"1" "name_11""name_22" "name_33"
"1" "name_11""name_22" "name_33"
"2" "name_11""name_22" "name_33"
"2" "name_11""name_22" "name_33"
"2" "name_11""name_22" "name_33"
"2" "name_11""name_22" "name_33"
"2" "name_11""name_22" "name_33"
update mytest8 t1 set name_3 = 'name333'
from (select ctid,* from mytest8 where ctid >='(0,2)'::tid and ctid<='(0,4)')t2
where t1.ctid = t2.ctid;
这里还需要注意的是,ctid会随着字段值的变化而变化,即当你update过后原来的ctid=(0,2)就不存在了,那么第二次时你就不能按照上面的语句来做了,而是需要:
update mytest8 t1 set name_3 = 'name333'
from (select * from (select ctid,row_number()over() as rown,* from mytest8)tt where rown>=2 and rown<=4)t2
where t1.ctid = t2.ctid;
在实际的情况下可能会有不同的解决方式,但是关键点就是在ctid的唯一性这一点的使用,当delete的时候也是一样的操作。
0 0
- PostgreSql中更新指定的某些行
- hibernate 中更新某些字段的几种update方法
- sql语句--更新表中所有数据的某些字段
- apt-get upgrade前,指定某些软件不更新
- python处理某些文件夹下的csv文件,提取指定行到新文件中
- Ubuntu 禁更新某些package的方法
- ThinkPHP框架中添加(add)或更新(save)时过滤某些字段的问题
- web项目中过滤器不对某些指定文件进行过滤
- 指定DataTable中某些列是否同时存在重复
- web项目中过滤器不对某些指定文件进行过滤
- postgreSQL获得指定表的列数
- 关于PostgreSql的指定中文排序问题
- EF中更新指定字段
- 更新字符串列表中,指定位置的字符串
- 更新字符串列表中,指定位置的字符串
- 更新字符串列表中,指定位置的字符串
- 更新字符串列表中,指定位置的字符串
- 更新字符串列表中,指定位置的字符串
- Linux编程中中各种头文件
- Mapzone平台下手动为IComboBox控件绑定数据源
- DFS Binary Tree Maximum Path Sum
- 高性能定时器 --- 时间堆
- iOS图片Path team 第三方库-FastImageCache解析
- PostgreSql中更新指定的某些行
- [BetterExplained]如何有效地记忆与学习
- css更改背景图片大小
- Android 完全退出程序的方法
- 《Linux就是这个范儿》
- iOS基础面试题(一)
- Android第二十天 ViewPager
- vector的用法
- c++ 访问 elasticsearch 的API