🐬
テーブルに存在するid列等の空き番号(欠番)の最大値・最小値を取得するSQL
テーブルデータ例
- 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 として出力する。
Discussion