🐬

テーブルに存在するid列等の空き番号(欠番)の最大値・最小値を取得するSQL

2024/04/05に公開

テーブルデータ例

  • users テーブル
+-------+---------+
| id    | name    |
+-------+---------+
|     1 | Tanaka  |
|     3 | Yamada  |
|     5 | Kimura  |
|     7 | Sato    |
|    10 | Tomita  |
+-------+---------+

空き番号の最大値を取得する

  • SQL
SELECT
	MAX(id - 1) as notExistIdMax
FROM
	users
WHERE
	(id - 1) NOT IN (SELECT id FROM users);
  • 出力結果
+---------------+
| notExistIdMax |
+---------------+
|             9 |
+---------------+
  • 説明
    WHERE句で id - 1 したデータが users テーブルに存在するかを確認し、存在しない id の最大値を notExistIdMax として出力する。

空き番号の最小値を取得する

  • SQL
SELECT
	MIN(id + 1) as notExistIdMin
FROM
	users
WHERE
	(id + 1) NOT IN (SELECT id FROM users);
  • 出力結果
+---------------+
| notExistIdMin |
+---------------+
|             2 |
+---------------+
  • 説明
    WHERE句で id + 1 したデータが users テーブルに存在するかを確認し、存在しない id の最小値を notExistIdMin として出力する。

参考

途中の空き番号(欠番)を取得するSQL(SELECT文)

Discussion