Problemi con la tua richiesta:
- Non puoi utilizzare
rangenella clausola WHERE. È un alias e verrà definito solo dopo l'esecuzione della clausola WHERE. - Anche se potessi usarlo, non ha senso confrontare un numero con un insieme di numeri usando
<>. In generale potresti usareIN(...), ma nel tuo caso particolare dovresti usareBETWEEN 100000 and 999999ed evita la necessità di unRANGEfunzione. - Se vuoi solo un numero, il limite dovrebbe essere 1, non qualcosa di casuale. Di solito per selezionare oggetti casuali usi
ORDER BY RAND().
Prova a utilizzare questa query:
SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1
Se vuoi trovare un numero non nella tua tabella e i numeri disponibili non sono prossimi all'esaurimento (diciamo che è stato assegnato meno dell'80%) un buon approccio sarebbe generare numeri casuali e controllare se sono assegnati finché non ne trovi uno che è non.
Può esistere una soluzione MySQL pura, ma penso che necessiti di unioni contorte, casuali e moduli.