Найти/определить/приблизительно вычислить какого 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
в строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д