Select 第一个缺少 0 以上的 id

Select first missing id above 0

我的列 (ID) 中有值

                           5
                           6
                           9

我想 select 首先从 0 上面丢失 ID。我希望 select 值将是 1。(如果 1 存在则它将 selects 2 等等.. .). 我正在使用此代码:

SELECT MIN(id) As MinMissingId FROM table1 where id>=0

但我的结果是第一个存在的ID并且没有丢失

您可以根据相关 question 中的答案来完成此操作。

select (case when min(id) > 0 then 1 else min(id) + 1 end)
from table1 t
where not exists (select 1
                  from table1 t2
                  where t2.id = t.id + 1
                 );

思路是找到第一个丢失的id。如果更大

这将 return 下一个以 1 开头的未使用 ID,适用于所有情况,例如table 为空或没有间隙:

WITH cte AS
 (
   SELECT id FROM tab
   UNION ALL 
   SELECT 0
 )
SELECT MIN(id) + 1
FROM cte
WHERE NOT EXISTS
 (
   SELECT * 
   FROM tab 
   WHERE tab.id = cte.id + 1
 )