たとえば、MySQL にこのテーブルがあります。
ID | Name
1 | Bob
4 | Adam
6 | Someguy
気がつけばID番号(2、3、5)がありません。
MySQL が不足している ID (この場合は "2,3,5") のみに応答するようにクエリを作成するにはどうすればよいですか?
たとえば、MySQL にこのテーブルがあります。
ID | Name
1 | Bob
4 | Adam
6 | Someguy
気がつけばID番号(2、3、5)がありません。
MySQL が不足している ID (この場合は "2,3,5") のみに応答するようにクエリを作成するにはどうすればよいですか?
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/にも役立つことを願っています
上記のクエリでは 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;