sql >> Base de Datos >  >> RDS >> Mysql

SELECT rango de enteros en MySQL. P.ej. 1,2,3,4,...,n;

Problemas con su consulta:

  1. No puedes usar range en la cláusula WHERE. Es un alias y solo se definirá después de que se ejecute la cláusula WHERE.
  2. Incluso si pudiera usarlo, no tiene sentido comparar un número con un conjunto de números usando <> . En general, podría usar IN(...) , pero en tu caso particular deberías usar BETWEEN 100000 and 999999 y evitar la necesidad de un RANGE función.
  3. Si solo desea un número, el límite debe ser 1, no algo aleatorio. Por lo general, para seleccionar elementos aleatorios se utiliza ORDER BY RAND() .

Intenta 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

Si quiere encontrar un número que no está en su tabla y los números disponibles no están cerca de agotarse (digamos que menos del 80 % están asignados), un buen enfoque sería generar números aleatorios y verificar si están asignados hasta que encuentre uno que sí lo esté. 't.

Es posible que exista una solución MySQL pura, pero creo que necesita algunas uniones retorcidas, aleatorias y de módulo.