Найти/определить/приблизительно вычислить какого id (auto increment-primary key) нет в базе - MySQL
Формулировка задачи:
Дано: простая таблица с 2 колонками id(a_i), value(varchar).
Дамп такой:
1-картошка
2-яблоко
3-помидор
5-тыква
9-баклажан
Нужно: получить 4 или 6 или 7 или 8.
Разрешено: использовать php.
Не разрешено: делать SELECT * ... WHERE 1 и проверять каждую запись, т.к. возможно в таблице будет сотни тысяч записей.
Решение задачи: «Найти/определить/приблизительно вычислить какого id (auto increment-primary key) нет в базе»
textual
Листинг программы
SELECT FROM `простая таблица` t1 LEFT JOIN `простая таблица` t2 ON t1.Id + 1 = t2.Id WHERE t2.Id IS NULL AND t1.Id < (SELECT Max(Id) FROM `простая таблица`)
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Выполняется запрос SELECT, который выбирает все столбцы из таблицы
простая таблица. - В строке FROM указывается таблица
простая таблицаи ей присваивается псевдонимt1. - В строке WHERE указывается условие, что
t2.Idдолжен быть NULL иt1.Idдолжен быть меньше максимального значенияIdв таблице. - В строке LEFT JOIN указываются таблица
простая таблицас псевдонимомt2, и выполняется операция объединения строк изt1иt2по значению столбцаId. - В результате выполнения запроса будет возвращены все строки из
t1, которые не имеют соответствующей строки вt2сIdна единицу больше текущего значенияIdв строке.