我的 SQL 表“Tokendata”中有一个 TokenId 列。
The TokenId has values say 1,2,3,4,6,7,8,10,11
这里上面的tokenIds都被占用了。当我查询这张表时,它应该给我下一个免费的 tokenId,在这种情况下它应该是5。
如果 TokenId 的值为"1,2,3,4,5,6,7,8,10,11,13,20",则查询应返回我9。
任何人都可以帮助我进行 SQL 查询吗?
注意:1
根据评论更新以解决丢失的情况。
SELECT
t.TokenId + 1
FROM (
SELECT TokenId
FROM Tokendata
UNION ALL
SELECT 0
) t
LEFT JOIN Tokendata t2 ON t.TokenId = t2.TokenId - 1
WHERE t2.TokenId IS NULL
ORDER BY t.TokenId
LIMIT 1
这是我的问题的答案。但这可能不是乐观的解决方案。欢迎优化解决方案
DECLARE @TempTable TABLE
(
TableID int PRIMARY KEY IDENTITY,
TokenId int
)
Insert Into @TempTable
Select tt.TokenId from XLBDataPoint tt where tt.TokenId= 1
DECLARE @RowCount INT
SET @RowCount = (SELECT COUNT(*) FROM @TempTable )
(SELECT
Top 1 t.TokenId + @RowCount
FROM TokenData t
Where t.TokenId+ @RowCount NOT in
(select t2.TokenId FROM TokenData t2)