有一table1
id      name_id
1         1000
2         1001
3         1002
4         1005
5         1006
6         1007
7         1009求一sql语句,把不连贯的name_id的id查找出来。。比如id=4、id=7两行。

解决方案 »

  1.   

    select * from (select id,name_id,(nvl(lag(name_id)over(order by id),1000)-name_id)rn from table1) t where t.rn<-1 or rn>1
      

  2.   

    其实这样就行了(如果数据都是你给出的格式的话):select * from (select id,name_id,(nvl(lag(name_id)over(order by id),1000)-name_id)rn from table1) t where t.rn<-1 
      

  3.   

    select id from table1 where name_id not in (select name_id+1 from table1)
      

  4.   

    如果你的id本身不是连贯的可以试试这个sql:
    select b.id from 
    (select id,name_id,rownum rn from table1)a,
    (select id,name_id,rownum rn from table1)b
    where b.name_id>a.name_id+1 and b.rn=a.rn+1如果原来id就是连贯的则不用rownum,可以试试这个:
    select b.id from table1 a,table1 b
    where b.name_id>a.name_id+1 and b.id=a.id+1
      

  5.   

    用SQL很难实现,建议使用PL/SQL实现
      

  6.   

    id是连贯的,这个语句可以实现我所需要的。。感谢lx978