一个数据表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.   

    update tb 
    set cid = (select top 1 cid from tb where pid = t.pid order by cid desc) from tb t
      

  2.   

    create table tb(aid int,   pid int,   atitle varchar(10),   cid int)
    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 行)
    */
      

  3.   

    还加个条件where cid = 0create table tb(aid int,   pid int,   atitle varchar(10),   cid int)
    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 行)
    */
      

  4.   

    update tb 
    set cid = (select top 1 cid from tb where cid<>0 and pid = t.pid  ) 
    from tb t
    where cid=0
      

  5.   


    update T
    set cid = (select top 1 cid from tb where cid <>0 and pid = T.pid  ) 
    from tb T
    where cid=0