Mysql
 sql >> Base de données >  >> RDS >> Mysql

SELECT plage d'entiers dans MySQL. Par exemple. 1,2,3,4,...,n;

Problèmes avec votre requête :

  1. Vous ne pouvez pas utiliser range dans la clause WHERE. Il s'agit d'un alias et ne sera défini qu'après l'exécution de la clause WHERE.
  2. Même si vous pouviez l'utiliser, cela n'a aucun sens de comparer un nombre avec un ensemble de nombres en utilisant <> . En général, vous pouvez utiliser IN(...) , mais dans votre cas particulier, vous devez utiliser BETWEEN 100000 and 999999 et éviter le besoin d'un RANGE fonction.
  3. Si vous ne voulez qu'un seul numéro, la limite doit être 1, pas quelque chose d'aléatoire. Habituellement, pour sélectionner des éléments aléatoires, vous utilisez ORDER BY RAND() .

Essayez d'utiliser cette requête :

SELECT phoneNum, 100000 as rangeStart, 999999 AS rangeEnd
FROM phone
WHERE phoneNum NOT BETWEEN 100000 AND 999999
ORDER BY RAND()
LIMIT 1

Si vous voulez trouver un nombre qui n'est pas dans votre table et que les nombres disponibles ne sont pas proches de l'épuisement (disons que moins de 80 % sont attribués), une bonne approche serait de générer des nombres aléatoires et de vérifier s'ils sont attribués jusqu'à ce que vous en trouviez un qui n'est pas c'est.

Une solution MySQL pure peut exister mais je pense qu'elle a besoin de quelques jointures torsadées, aléatoires et modulées.