SQLで空き番号(歯抜け)を取得する方法です。
いつも忘れるのでメモ。
欲しい条件は↓
以下、Oracle – SQLのサンプルです。
select
case
when min(tbl1.COL_NUMBER) != 1 then 1
when min(tbl1.COL_NUMBER) is null then 1
else min(tbl2.COL_NUMBER) + 1
end as NUMBERING
from
TBL_NUMBER tbl1
,(
select
COL_NUMBER
from
TBL_NUMBER
where
(COL_NUMBER + 1) not in (
select
COL_NUMBER
from
TBL_NUMBER
)
) tbl2;
tbl1は、1が歯抜け or レコード未登録または数値未登録の検査用テーブル。
tbl2は、対象列 + 1が存在しないレコードの取得用テーブル。
RDBMS固有の関数などを使っていないため、大抵のRDBMSでいけると思います。
わりとよく使うけど、頻繁に忘れるので備忘録として。
参考までに。