首页 新闻 搜索 专区 学院

大家说说下面这个更新语句有哪些写法

0
[已解决问题] 解决于 2013-08-06 10:14

假设一个表record_test中有三个字段:id,on,off,其中id是以1自增的

 id  on  off

1 11 111
2 22 222
3 33 333
4 44 444
5 55 555
6 66 666
7 77 777
8 88 888

.......

现在想要实现的是将第一行的off值更新到第二行的on值,第二行的off值更新到第三行的on值,即前一行的off值更新到下一行的on值,请写一条sql语句

xiaoqiangzhou的主页 xiaoqiangzhou | 初学一级 | 园豆:83
提问于:2013-08-04 15:14
< >
分享
最佳答案
0

问题解决了吗,给你个SQL语句

update record_test  set a.on =b.off   from record_test a inner join (select id,off from record_test) b on a.id=b.id+1

奖励园豆:5
mifeng2012 | 菜鸟二级 |园豆:269 | 2013-08-05 10:41

嗯,谢谢mifeng2012的回答,我问其他人给我答案是 update a SET a.turnontime=b.turnofftime

FROM (SELECT * FROM test_zxq) a,(SELECT * FROM test_zxq) b
WHERE a.id=b.id+1,跟您的一样,不过你的更精简,呵呵

xiaoqiangzhou | 园豆:83 (初学一级) | 2013-08-06 10:12
其他回答(2)
0

两种写法:

1、子查询,很容易实现~

2、连接更新~(前提是连续主键,当然不连续也是有办法的!)

幻天芒 | 园豆:36781 (高人七级) | 2013-08-04 21:35

 
幻天空,你好,请问可以看看你的sql吗?谢谢了

支持(0) 反对(0) xiaoqiangzhou | 园豆:83 (初学一级) | 2013-08-04 22:39

@xiaoqiangzhou: 

update record_test set on=(select top 1 off from record_test t where t.id=id-1)
where record_test.id>1
子查询版,未测试!
连接也是一个道理~
支持(0) 反对(0) 幻天芒 | 园豆:36781 (高人七级) | 2013-08-04 22:52

@幻天芒: 谢谢你的回答,我将你的语句测试了下,有一处需要改正,那就是子查询中

t.id=id-1后面的id需要指明是哪个表中的,应该是t.id=record_test.id-1,这样测试通过,不然子查询中两个ID都是识别成t表了。导致查询不到数据
支持(0) 反对(0) xiaoqiangzhou | 园豆:83 (初学一级) | 2013-08-06 09:55
0

二楼的好些

jerry-Tom | 园豆:4077 (老鸟四级) | 2013-08-05 11:06

支持(0) 反对(0) xiaoqiangzhou | 园豆:83 (初学一级) | 2013-08-06 10:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册