Как найти пробелы в последовательной нумерации в MySQL? - PullRequest
101 голосов
/ 03 декабря 2010

У нас есть база данных с таблицей, значения которой были импортированы из другой системы. Существует столбец с автоинкрементом, и нет повторяющихся значений, но отсутствуют значения. Например, запустив этот запрос:

select count(id) from arrc_vouchers where id between 1 and 100

должен вернуть 100, но вместо этого он возвращает 87. Можно ли выполнить какой-либо запрос, который вернет значения пропущенных чисел? Например, записи могут существовать для идентификаторов 1-70 и 83-100, но нет записей с идентификаторами 71-82. Я хочу вернуть 71, 72, 73 и т. Д.

Возможно ли это?

Ответы [ 11 ]

0 голосов
/ 04 апреля 2014

Хотя все это, кажется, работает, набор результатов возвращается в течение очень длительного времени, когда есть 50 000 записей.

Я использовал это, и он находит пробел или следующий доступный (последний использованный + 1)с гораздо более быстрым возвратом из запроса.

SELECT a.id as beforegap, a.id+1 as avail
FROM table_name a
where (select b.id from table_name b where b.id=a.id+1) is null
limit 1;
...