
我的思路是用1~10
减去
除了断点以外的ID,
然后查找(断点ID-1)
那一行的记录。这个脚本具有可扩展性。当你取的是100或者其他数值也可以。我用的数据库是oracle。具体做法:
1
新建一张表B,
为了存全部的1
~10
CREATE
table
B
as
select
ID
FROM
A
where
1=2;
2
向B表中插入1~10,
C表是数据库中任意表要求至少有11行数据,为了取rownum
insert
into
B
select
rownum
from
C
where
rownum
<
11;
3
查找断点
select
from
A
where
ID
IN
(select
ID
-1
from
B
where
ID
not
in
(select
ID
from
A)
)
;
只有几万条数据,那就好办多了,列举个笨方法如下
如果要一次性查出来,需要用递归了,因为不知道你中间的断点会有多少个,所以建议把这个表复制一份,直接对表进行删除 *** 作
直接for循环
for($i ==1;$i<你的最大数据条数;$i++){
查询你的记录,是否有等于$i和$i+1的,如果这两条记录同时存在就删除$i编号
}
DECLARE @T1 table(UserID int , [name] nvarchar(50),num int);
insert into @T1 (UserID,[name],num) values (1001,'a',8)
insert into @T1 (UserID,[name],num) values (1002,'b',6)
insert into @T1 (UserID,[name],num) values (1003,'c',8)
insert into @T1 (UserID,[name],num) values (1004,'a',8)
insert into @T1 (UserID,[name],num) values (1005,'b',8)
select from @t1
select a from
(select UserID,[name],[num] from @t1 ) a join
(select UserID,[name],[num] from @t1 ) b on aUserID<bUserID and aUserID+1=bUserID
and anum=bnum
group by auserid,a[name],a[num]
得到结果:1003 c 8
1004 a 8
假如你的原来的表tb有
id,name,address三列
其中id是自动增长列,删除其中若干行以后,你可以这样啊
创建存储过程
createproc
as
begin
declare@temptable
(
idintidentity(1,1),namevarchar(20),addressvarchar(20)
)
insert@temp
selectname,addressfromtb
selectfrom@temp
end
这样你就可以得到一个ID连续的新表了
以上就是关于oracle 怎么得到一个表中连续ID中断开的ID全部的内容,包括:oracle 怎么得到一个表中连续ID中断开的ID、mysql查询自增id不连续 怎么 *** 作、SQL数据库中查询连续编号的的数据。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)