Проблеми с вашата заявка:
- Не можете да използвате
range
в клаузата WHERE. Това е псевдоним и ще бъде дефиниран само след изпълнение на клаузата WHERE. - Дори и да можете да го използвате, няма смисъл да сравнявате число с набор от числа с помощта на
<>
. По принцип можете да използватеIN(...)
, но във вашия конкретен случай трябва да използватеBETWEEN 100000 and 999999
и избягвайте нуждата отRANGE
функция. - Ако искате само едно число, ограничението трябва да бъде 1, а не нещо произволно. Обикновено, за да изберете произволни елементи, използвате
ORDER BY RAND()
.
Опитайте да използвате тази заявка:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Ако искате да намерите число, което не е във вашата таблица и наличните числа не са близо до изчерпване (да речем, че са присвоени по-малко от 80%), добър подход би бил да генерирате произволни числа и да проверявате дали са присвоени, докато не намерите такъв, който не е не.
Може да съществува чисто MySQL решение, но мисля, че се нуждае от някои усукани съединения, произволни и модулни.