Преоткриване на колелото или намиране на липсваща ID стойност в MySQL таблица
1) Извършете итерация в цикъл: например в SQL създайте CUR i + 1 курсор от 2001 до 2999 и заявете до празна стойност. Цикълът може да се направи с всеки външен софтуер, смисълът на принципа не се променя.
2) Вторият принцип е да се използва ЛЕВА (ВЪНШНА) JOIN последователност 2001. 2009 с таблица t1 (КЪДЕТО t1.phone Е NULL, разбира се), или таблица t1 със себе си със стъпка отместване:
Изобщо не обмислям друг вариант с използване на IN поради обемността.
При малки количества данни и двете решения (и дори с IN) работят добре, а при голям брой записи тези решения са или ресурсоемки, или времеемки, или и двете. Зависи от капацитета на сървъра и настройките на базата данни, но във всеки случай, ако сортирате милиони записи или се присъедините към такава таблица, дори на мощен сървър, изпълнението ще отнеме значително време.
Исках да реша проблема бързо, без да натоварвам сървъра и за предпочитане с една заявка. В един, не в един, но ето какво се случи:
В сравнение с присъединяването, простите селекции са стотици пъти по-бързи.
Ясно е, че такова решение е известно, но, колкото и да е странно, не беше възможно да го намерите в Интернет, така че искам да споделя тези прости „велосипеди“.
UPD. Отлично решение беше предложено от stepmex в лично съобщение Без никаква допълнителна конструкция на номериране и сравняване на редове, елегантно реших проблема с помощта на (SELECT 1 . ) IS NULL Страхотна находка, мисля:
И тук можете да получите грант за тестов период на Yandex.Cloud. Необходимо е само да въведете "Habr" в полето "секретна парола".