SQL获取缺少的ID

时间:2012-03-26 20:11:36

标签: mysql sql

  

可能重复:
  Find missing values
  How do I get first unused ID in the table?

   myTable
-----+---------
 ID  | Value
-----+---------
 7   | Foo
 9   | Bar
 19  | Etc

我需要在这里查询以获取缺少的ID(编号1),结果将只是第一行(结果),可能使用LIMIT 1,然后使用此ID插入。所以,看起来会这样:

   myTable
-----+---------
 ID  | Value
-----+---------
 1   | Fir
 7   | Foo
 9   | Bar
 19  | Etc

现在在下一个查询中,它只会产生数字2。

注意:
  - 我正在使用MySQL 5.1.32

1 个答案:

答案 0 :(得分:0)

编辑:在他让我们知道他正在使用什么数据库之前回答了......但是这个答案告诉我们如何在MySQL中创建一个临时表,基本的想法应该仍然有效:Create table variable in MySQL

这适用于T-SQL:

DECLARE @GapTable
(
    ID int IDENTITY(1,1),
    OtherTableID int    
)

INSERT INTO @gapTable (OtherTableID)
SELECT OtherTableID = ID
FROM OtherTable
ORDER BY ID


SELECT MIN(ID)
FROM @GapTable
WHERE ID <> OtherTableID

基本上,您创建一个表变量并将所有内容插入其中。这应该为您提供一个已知良好的ID值列表。然后,您只需选择生成的ID与现有ID不匹配的第一个值,您就会知道可以使用的内容。