0

column = IDでインデックス付けされたテーブルがあり、これは5桁の整数です。

これは非常に古いテーブルであり、自動インクリメントされることはありませんでした。

未使用のIDをすべてリストしたい。

SELECT * ORDER BYステートメントでそれを実行し、増分ループに対して結果を実行することはできますfor()が、SQLクエリステートメントがMySQL内でこれを実行するかどうか、または私が計画しているアプローチよりも賢い方法があるかどうかを誰かが知っているかどうか疑問に思いました。

ありがとう

4

3 に答える 3

1

これが私がとるアプローチです。

  1. number1からnまでのテーブルを作成します(nは最大のIDです)。数値は、このようなクエリを使用して生成できます。
  2. LEFT JOINテーブルに対してaを実行し、結果numberのみをフェッチしNULLます。

このデモを見る

于 2012-11-28T20:26:38.363 に答える
0

あなたはこのようなクエリを行うことができます

    SELECT id+1 as startId, (SELECT MIN(t3.id) -1 FROM table t3 
       WHERE t3.id > t1.id) as endId
    FROM Table AS t1
    WHERE 
    NOT Exists 
        (
           SELECT t2.id
           FROM Table as t2
           WHERE t2.id+1 = t2.id
        )
    HAVING (SELECT MIN(t3.id) -1 FROM table t3 
       WHERE t3.id > t1.id) IS NOT NULL
于 2012-11-28T20:32:31.457 に答える
0

私はこれがインサートで動作することを知っています...多分アップデートでも動作します....それをテストしますが、今はWindows PCでimであり、mysqlはインストールされていません:)

select @i := 1;
update tbl set id = @id:=@id+1;

http://www.electrictoolbox.com/autoincrement-value-mysql/

アップデート:

現在テストされており、非常にうまく機能しています...

select @i := 0;

dbの最初のエントリが1で始まるようにします。

于 2012-11-28T21:15:24.673 に答える