44

たとえば、MySQL にこのテーブルがあります。

ID | Name
1  | Bob
4  | Adam
6  | Someguy

気がつけばID番号(2、3、5)がありません。

MySQL が不足している ID (この場合は "2,3,5") のみに応答するようにクエリを作成するにはどうすればよいですか?

4

8 に答える 8

50
SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
    FROM testtable AS a, testtable AS b
    WHERE a.id < b.id
    GROUP BY a.id
    HAVING start < MIN(b.id)

このリンクが http://www.codediesel.com/mysql/sequence-gaps-in-mysql/にも役立つことを願っています

于 2012-09-07T20:50:19.917 に答える
2

上記のクエリでは 2 つの列が得られるため、これを試して 1 つの列で欠落している数値を取得できます

select start from 
(SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
    FROM sequence AS a, sequence AS b
    WHERE a.id < b.id
    GROUP BY a.id
    HAVING start < MIN(b.id)) b
UNION
select c.end from (SELECT a.id+1 AS start, MIN(b.id) - 1 AS end
    FROM sequence AS a, sequence AS b
    WHERE a.id < b.id
    GROUP BY a.id
    HAVING start < MIN(b.id)) c order by start;
于 2015-08-26T12:48:30.013 に答える