问题:在项目开发中,我们有时候需要根据一些限制条件查询出一个结果集后,再将这个结果集的比如前10行进行某一update操作,后10行再进行另一个update操作。
解决方案:
1)根据限制条件查询出结果集(该结果集应该以其主键进行排序),在该结果集上给各行记录进行编号。
2)根据各行记录的编号取出一次取出前10行的记录或后10行的记录。
3)进行各自的update操作。
参考实现:
以下将以我在项目中多次用到的SQL为例。
代码如下:
update b_H3CMAC
set b_H3CMAC.used='M'
where exists (
select * from (
select a.inx2,row_number()over(order by a.inx2) req --以tableName表的主键id字段进行排序
from b_H3CMAC a where a.printed='N' and a.used='Y') c --加上查询结果集的限制条件
where b_H3CMAC.inx2=c.inx2 and c.req>=1300 and c.req<=1600)--将要更新查询结果集的第1到第3条记录
根据别人博客上面的DB2插入方式修改而来,DB2的代码如下:
update tableName b
set b.A=2 ,b.B=current date --B字段为日期类型
where exists (
select 1 from (
select a.id,row_number()over(order by a.id) req --以tableName表的主键id字段进行排序
from tableName a where a.C =22 and a.D=1) c --加上查询结果集的限制条件
where b.id=c.id and c.req>=1 and c.req<=3);--将要更新查询结果集的第1到第3条记录