Problemas com sua consulta:
- Você não pode usar
range
na cláusula WHERE. É um alias e só será definido após a execução da cláusula WHERE. - Mesmo se você pudesse usá-lo, não faz sentido comparar um número com um conjunto de números usando
<>
. Em geral, você pode usarIN(...)
, mas em seu caso particular você deve usarBETWEEN 100000 and 999999
e evite a necessidade de umRANGE
função. - Se você quiser apenas um número, o limite deve ser 1, não algo aleatório. Normalmente para selecionar itens aleatórios você usa
ORDER BY RAND()
.
Tente usar esta consulta:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Se você deseja encontrar um número que não está em sua tabela e os números disponíveis não estão próximos do esgotamento (digamos, menos de 80% são atribuídos), uma boa abordagem seria gerar números aleatórios e verificar se eles são atribuídos até encontrar um que seja não.
Uma solução MySQL pura pode existir, mas acho que precisa de algumas junções torcidas, aleatórias e de módulo.