テーブルで、多くの行が削除されました。次のINSERT
で欠落している行のIDを取得する方法は?
例えば
id col1
1 1
3 3
4 4
5 5
8 8
9 9
次のINSERT
で使用可能な最初のIDの値を取得するにはどうすればよいですか。ここでid = 2
を取得します。
何かのようなもの
SELECT id+1 FROM table WHERE CLAUSE // pointing to the least available value
// or x = id +1 (after SELECT)
INSERT INTO table (id, ....) VALUES ('x', ....)
このようなクエリを使用すると、最初に利用可能なid
を取得できます
SELECT id + 1 available_id
FROM table1 t
WHERE NOT EXISTS
(
SELECT *
FROM table1
WHERE id = t.id + 1
)
ORDER BY id
LIMIT 1
出力:
| AVAILABLE_ID | | ----------- | 2 |
これは---(SQLFiddleデモです
挿入するには
INSERT INTO table1 (id, col1, ...)
SELECT id + 1, <some_value>, ...
FROM table1 t
WHERE NOT EXISTS
(
SELECT *
FROM table1
WHERE id = t.id + 1
)
ORDER BY id
LIMIT 1;
これはSQLFiddleデモです
ユーザー定義変数を使用できます。最善の解決策ではありませんが、それは役に立つ場合があります。
set @raw_number = (select ID - 1
from names
LIMIT 1);
select @raw_number as RESULT
from names
where ID > @raw_number := @raw_number + 1
LIMIT 1;