有两个表: answer 和problem .两个表中的部分字段如下:
 answer 表中的字段:   id, problem(外键) askstate(回答状态)。  problem  表中的字段:id, asksate(根据answer的状态设置,如果它的回答有最佳答案,那么就设置为1,反之为0), answernum(回答条数)     其中asksate可以有三种值分别为0, 1(代表被采取为正确答案), -1(回答过期), 一个problem只能对应一个最佳答案,但是现在此表中的数据,一个problem的两个回答都会1,现在要设置其中的一个为1的等于0。 数据库中大概有将近2000条的数据,该怎么写sql语句。急用,请各位高手指点!谢谢

解决方案 »

  1.   

    update problem a set asksate=0
    where not exists(
    select * from (
    select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn)  b
    where rn=1 and a.rowid=b.rowid;
      

  2.   

    请问,这里是要将后出现的“答案”表中的“回答状态”设为1,并且将之前设为1的“回答状态”设为0吧!可以先将这条问题的回答都设为0
    update answer a set a.asksate=0 where a.problem=problem.id
    然后在插入数据的时候,将最新插入的那条数据的“回答状态”设为1
      

  3.   

    update problem a set asksate=0 
    where not exists( 
    select * from ( 
    select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn)  b 
    where rn=1 and a.rowid=b.rowid;
      

  4.   

    现在是要修改answer表中的数据,就是几个答案对应同一个问题,但是其中有两个答案的状态都为1, 修改第一个出现为1的答案状态为0
      

  5.   

    update problem a set asksate=0 
    where not exists( 
    select * from ( 
    select rowid,id,askstate,answernum,row_number() over(partition by askstate,题号) rn)  b 
    where rn=1 and a.rowid=b.rowid;
      

  6.   


    借1楼的,改了改update answer a set asksate=0 
       where exists (
           select 1 from (
                   select id, 
                          count(1) over(partition by problemid) cnt, 
                          row_num() over(partition by problemid order by id asc) row_no 
                    from asksate 
                    where askstate=1) b 
           where 
                a.id=b.id and b.cnt>1 and b.row_no=1)
    没有测试,你自己试试。
      

  7.   

    row_num() over(partition by problemid order by id asc) 这句中的row_num()是什么?
      

  8.   

    update problem a set asksate=0 
    where a.id in(select max(id) from problem where asksate=1 group by problem having(count(asksate)>1)
      

  9.   

    update problem a set asksate=0 
    where a.id in(
      select max(id) from problem where asksate=1 group by problem having(count(asksate)>1)
    )
      

  10.   


    update answer a set asksate=0
    where exists (
    select 1 from (
    select id,
    count(1) over(partition by problemid) cnt,
    row_num() over(partition by problemid…
    [/Quote]
    row_number()执行就可以了,谢谢你 
      

  11.   

    补充: 现在数据库answer表中多条相同的回答对应同一个问题,并且回答的id号也一样,现在想把重复的数据删掉,只留一条,改怎么写sql文