連番の中で 「抜け番」見つけるSQL
行の番号などに自動で採番していった値で、使わなくなって「抜け番」になってしまうことがあります。
そんな時にその「抜け番」を再利用するために「抜け番」の一番小さな値を検索するSQLです。
テーブル内の連番の抜け番を探す
前準備としてテーブルを作成し、連番の「3」が抜けたデータを挿入します。
--テーブルの準備 CREATE TABLE test_table ( no int ) --データの準備 INSERT INTO test_table VALUES ( 1 ) INSERT INTO test_table VALUES ( 2 ) INSERT INTO test_table VALUES ( 4 ) INSERT INTO test_table VALUES ( 5 )
準備ができたら以下のSQLを実行して抜け番を取得します。
--歯抜けの番号を探す SELECT MIN( no + 1 ) AS 抜け番 FROM test_table WHERE ( no + 1 ) NOT IN ( SELECT no FROM test_table )
以下が実行した結果です。
抜け番 |
---|
3 |
抜け番がなかった場合は現在存在する番号の最大値+1が返されます。
(上記で準備したテーブルに抜け番「3」を埋めます)
--データの準備 INSERT INTO test_table VALUES ( 3 ) --歯抜けの番号を探す SELECT MIN( no + 1 ) AS 抜け番 FROM test_table WHERE ( no + 1 ) NOT IN ( SELECT no FROM test_table )
実行結果は
抜け番 |
---|
6 |
と最大の値+1を返してくれます。
まとめ
抜け番を探すのは割とよくある処理ですので、簡単にSQLで探せると便利ですね。
以上、「連番の中で 「抜け番」見つけるSQL」でした。