Problemas com sua consulta:
- Você não pode usar
rangena 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 999999e evite a necessidade de umRANGEfunçã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.