最近在项目中遇到一个oracle表修改的问题,但是想了好久才相出来,感觉此问题 应该很多情况都会用到的,问题大概是这样的
一个oracle数据库表tab1中有这些数据
storeid title name number isread
1 www qqq 1 0
1 www qqq 2 0
1 www qqq 3 0
1 www qqq 4 0
2 eee rrr h 0
2 eee rrr j 0
2 eee rrr k 0
3 aaa bbb c 0
3 aaa bbb d 0
.....
将近一万条类似的数据
请写一条update的sql把表中的isread字段置为1(要求storeid相同的数据只需要其中的任意一条的isread置为1,其他还是0)
storeid title name number isread
1 www qqq 1 0
1 www qqq 2 0
1 www qqq 3 0
1 www qqq 4 0
2 eee rrr h 0
2 eee rrr j 0
2 eee rrr k 0
3 aaa bbb c 0
3 aaa bbb d 0
.....
将近一万条类似的数据
请写一条update的sql把表中的isread字段置为1(要求storeid相同的数据只需要其中的任意一条的isread置为1,其他还是0)
这个表里面没有主键,每条数据也不可能完全相同,只不过相同ID的这些数据里面好多字段是相同的
针对这个问题:
1:我第一想的是用sql修改,但是想了很久没相出来,所以后来选择的是jdbc ,查询出一个可编辑的rowset 如果storeid和上一条一样则不修改,不一样则修改,很容易就解决了这个问题,只是jdbc修改数据库的时候可能慢点
2:当我解决完了该问题的时候,我并不气馁,有事没事儿的时候也会想一下这个问题,终于某日终于想出了这条sql语句可以修改
update tab1 t1 set t1.isread=1
where t1.rowid in
(
select max(t2.rowid) from tab1 t2
group by t2.storeid,t2.isread
)
这是结果
where t1.rowid in
(
select max(t2.rowid) from tab1 t2
group by t2.storeid,t2.isread
)
这是结果