3 回答
TA贡献1802条经验 获得超5个赞
这个问题经常出现,可悲的是,最常见(也是最可移植的)答案是创建一个临时表来保存应该存在的ID ,然后进行左联接。MySQL和SQL Server之间的语法非常相似。唯一真正的区别是临时表语法。
在MySQL中:
declare @id int
declare @maxid int
set @id = 1
select @maxid = max(id) from tbl
create temporary table IDSeq
(
id int
)
while @id < @maxid
begin
insert into IDSeq values(@id)
set @id = @id + 1
end
select
s.id
from
idseq s
left join tbl t on
s.id = t.id
where t.id is null
drop table IDSeq
在SQL Server中:
declare @id int
declare @maxid int
set @id = 1
select @maxid = max(id) from tbl
create table #IDSeq
(
id int
)
while @id < @maxid --whatever you max is
begin
insert into #IDSeq values(@id)
set @id = @id + 1
end
select
s.id
from
#idseq s
left join tbl t on
s.id = t.id
where t.id is null
drop table #IDSeq
TA贡献1808条经验 获得超4个赞
我登陆此页面希望找到SQLITE的解决方案,因为这是我在搜索相同问题的SQLITE时找到的唯一答案。
我找到的最终解决方案是来自本文的 浮动中间博客-SQLITE答案
希望它可以帮助别人:-)
简单的解决方案是:
SELECT DISTINCT id +1
FROM mytable
WHERE id + 1 NOT IN (SELECT DISTINCT id FROM mytable);
天才。
添加回答
举报