比如表test中有如下值ID  Name   Password
8   Lucy   123
9   Lily   123
11  Jack   123
12  Jim    123
13  HanMeiMei 123第一个问题:前面的序号1-7无值,现在我想把以上的序号全减7变成1、2、4、5、6,怎么做?
第二个问题:同样减7,但我想它们连续,变成1、2、3、4、5(这个问题可能有点难,可以不回答)我试过了 update test set "ID"="ID"-1;正常在未修改的情况下没问题,可是若我修改了ID=8的那条,查出来的时候它就会排到最后,当执行上面那一句的时候就会提示错误:
ERROR:  duplicate key value violates unique constraint "test_pkey"
描述:  Key ("ID")=(7) already exists.说这条已经存在。我用的数据库是PostgreSQL,它有一个很奇怪的现象,就是最新修改的排在最后,本来可以用order by的,可是我放了很多地方都会报错不执行!求高人路过。数据库sql语句序号减固定值

解决方案 »

  1.   

    第一个问题:前面的序号1-7无值,现在我想把以上的序号全减7变成1、2、4、5、6,怎么做?
    update tb set ID=ID-7;第二个问题:同样减7,但我想它们连续,变成1、2、3、4、5(这个问题可能有点难,可以不回答)
    建一个同样结构的表  将数据导入  insert into newtable select * from oldtables;然后drop table oldtable;alter table newtable rename oldtable;
      

  2.   

    第二个问题回答的真棒!、但是第一个问题,我因为修改了Lucy的信息,结果一查,发现Lucy居然排到最后了
    #select * from test; ID |   Name    | Password
    ----+-----------+---------
      6 | Lily      | 123
      8 | Jack      | 123
      9 | Jim       | 123
     10 | HanMeiMei | 123
      5 | Lucy      | 12345
    (5 行记录)然后再执行
    # update test set "ID"="ID"-1;
    的时候就出错了:
    ERROR:  duplicate key value violates unique constraint "test_pkey"
    描述:  Key ("ID")=(5) already exists.我发现一个问题,那就是postgresql每次更新一个条目后,它都会排到最后,打乱以前的顺序,求指教!
      

  3.   

    第一个问题:前面的序号1-7无值,现在我想把以上的序号全减7变成1、2、4、5、6,怎么做?
     update test set ID=ID-1 oder by id desc
      

  4.   

    # update test set "ID"="ID"-1 order by id desc;
    ERROR:  syntax error at or near "order"
    第1行update test set "ID"="ID"-1 order by id desc;# update test set "ID"="ID"-1 order by id;
    ERROR:  syntax error at or near "order"
    第1行update test set "ID"="ID"-1 order by id;
      

  5.   

    PostgreSQL 我在提问中提到了
      

  6.   

    update test set id=id-7 order by id desc
      

  7.   

    PostgreSQL 我在提问中提到了帮你转到psql版
      

  8.   

    没有找到解决问题的答案啊 结贴不是坑害后人吗我发现postgreSQL一个特点:凡是修改了某一条,那么这条被select查出来的时候总是显示在最后,若是用by order查是没问题,可是它与“update test set id=id-7”不可同用,错误提示见上,有什么办法解决吗
      

  9.   

    alter table test drop  constraint test_pkey;
    update test set test=test-7;
    alter table test add constraint test_pkey primary key (ID);
    如果你的ID是自增长列 就算update成1 2 3 4 5又怎样呢,下一条记录插入时,序号是11,不是6,还要研究如何重置
      

  10.   

    OK 你这方法可行 3Q了~