Проблемы с вашим запросом:
- Вы не можете использовать
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%). Хороший подход - генерировать случайные числа и проверять, назначены ли они, пока вы не найдете одно, которое не соответствует.
AЧистое решение MySQL может существовать, но я думаю, что ему нужны некоторые скрученные объединения, случайные и модули.