連番中で 「歯抜け」の番号を見つけ出すSQL

プログラミング SQL Server

SQLserverでテーブルに設定されている連番の中で「歯抜け」の番号を見つけ出すSQLです。

番号の最大数などが決まっている場合は使わなくなった番号(歯抜け)を再利用することがよくあると思います。

今回はそんな「歯抜け」の番号を見つけ出す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 )

歯抜けの番号を探す

--歯抜けの番号を探す
SELECT
    MIN( no + 1 ) AS 歯抜けの番号
FROM
    test_table
WHERE
    ( no + 1 ) NOT IN ( SELECT no FROM test_table )

実行結果

抜け番
3

歯抜けの番号が無い場合の動作

連番の「3」を追加してSQLを実行すると

--データの準備
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

と最大の値を返してくれます。

タイトルとURLをコピーしました