一个数据表a,结构如下aid pid atitle cid
1 2 dake 3
2 1 joke 2
3 2 sk 0
4 1 ms 0
...这里的cid我是新加的键值,我现在想根据pid来更新cid,大概的意思上,我已经更新了一部分数据(cid不为0的,cid为0的数据都是我还没有更新的),比如,aid为1和3的,1的是已经更新的,3的是没有更新的,我想pid相同的数据,他们的cid都相同,比如第一个条 pid为2,那么可以获得这个cid为3,然后我就更新第三条的cid为3,类似,第四条就可以根据第四条更新cid为2,请问这个SQL语句该怎么写呢?
1 2 dake 3
2 1 joke 2
3 2 sk 0
4 1 ms 0
...这里的cid我是新加的键值,我现在想根据pid来更新cid,大概的意思上,我已经更新了一部分数据(cid不为0的,cid为0的数据都是我还没有更新的),比如,aid为1和3的,1的是已经更新的,3的是没有更新的,我想pid相同的数据,他们的cid都相同,比如第一个条 pid为2,那么可以获得这个cid为3,然后我就更新第三条的cid为3,类似,第四条就可以根据第四条更新cid为2,请问这个SQL语句该怎么写呢?
set cid = (select top 1 cid from tb where pid = t.pid order by cid desc) from tb t
insert into tb values(1 , 2 , 'dake' , 3 )
insert into tb values(2 , 1 , 'joke' , 2 )
insert into tb values(3 , 2 , 'sk' , 0 )
insert into tb values(4 , 1 , 'ms' , 0 )
goupdate tb
set cid = (select top 1 cid from tb where pid = t.pid order by cid desc) from tb tselect * from tbdrop table tb/*
aid pid atitle cid
----------- ----------- ---------- -----------
1 2 dake 3
2 1 joke 2
3 2 sk 3
4 1 ms 2(所影响的行数为 4 行)
*/
insert into tb values(1 , 2 , 'dake' , 3 )
insert into tb values(2 , 1 , 'joke' , 2 )
insert into tb values(3 , 2 , 'sk' , 0 )
insert into tb values(4 , 1 , 'ms' , 0 )
goupdate tb
set cid = (select top 1 cid from tb where pid = t.pid order by cid desc) from tb t
where cid = 0select * from tbdrop table tb/*
aid pid atitle cid
----------- ----------- ---------- -----------
1 2 dake 3
2 1 joke 2
3 2 sk 3
4 1 ms 2(所影响的行数为 4 行)
*/
set cid = (select top 1 cid from tb where cid<>0 and pid = t.pid )
from tb t
where cid=0
update T
set cid = (select top 1 cid from tb where cid <>0 and pid = T.pid )
from tb T
where cid=0