連番の中で 「抜け番」見つけるSQL
行の番号などに自動で採番していった値で、使わなくなって「抜け番」になってしまうことがあります。
そんな時にその「抜け番」を再利用するために「抜け番」の一番小さな値を検索するSQLです。
テーブル内の連番の抜け番を探す
前準備としてテーブルを作成し、連番の「3」が抜けたデータを挿入します。
01 02 03 04 05 06 07 08 09 10 11 | --テーブルの準備 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を実行して抜け番を取得します。
01 02 03 04 05 06 07 | --歯抜けの番号を探す SELECT MIN ( no + 1 ) AS 抜け番 FROM test_table WHERE ( no + 1 ) NOT IN ( SELECT no FROM test_table ) |
以下が実行した結果です。
抜け番 |
---|
3 |
抜け番がなかった場合は現在存在する番号の最大値+1が返されます。
(上記で準備したテーブルに抜け番「3」を埋めます)
01 02 03 04 05 06 07 08 09 10 | --データの準備 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」でした。
+1