人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

次のような結果を得たいときにどのようなSQLを書けばよいのか教えてください。(MySQL5)

id
1
2
3
4
7
10
15

このように連番でid(最大で100まで)が振られているテーブルがあるとして、そのうちの一部を削除して上記のような状態になっているとします。

この状態で「空いている最も小さなid(この場合は【5】)」を取得したいのですが、どのように書けばよいでしょうか?

id

1
2
3
4
5
6

この場合は【7】を取得したいです。
新たにデータを登録する際に「空いている最も小さなidに入れたい」というのが趣旨です。


よろしくお願いします。

●質問者: southgate_01
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:SQL データ 趣旨
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kn1967
●40ポイント
SELECT T1.id + 1 AS NewID
FROM テーブル名 AS T1
WHERE NOT EXISTS (SELECT * FROM テーブル名 AS T2 WHERE T2.id = T1.id + 1)
ORDER BY T1.id
LIMIT 1
;

自身に1プラスしたidが存在しないレコードに絞り込み、

並び替え、そして最初の1レコードを取得するという考え方です。

他にもっと効率の良い方法があれば良いのですが・・・。

◎質問者からの返答

コメントありがとうございます。

さっそくやってみます。


2 ● khazad-Lefty
●40ポイント

すなおに考えたら、別に1?100までを格納されているテーブルを別に用意するのが無難だと思います。

その上で、元のテーブルをtable1,上記連番テーブルをtable2とすると

Select min(table1.id) 
 from table1
 left join table2
 on table1.id=table2.id
where table2.id is null

で取れるはずです。

◎質問者からの返答

コメントありがとうございます。


このやり方だとできそうなのですが、この為だけに別テーブルを用意するというのはちょっと迷いますね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ