sql >> Databasteknik >  >> RDS >> Mysql

VÄLJ intervall av heltal i MySQL. T.ex. 1,2,3,4,...,n;

Problem med din fråga:

  1. Du kan inte använda range i WHERE-klausulen. Det är ett alias och kommer bara att definieras efter att WHERE-satsen har utförts.
  2. Även om du skulle kunna använda det, är det meningslöst att jämföra ett tal med en uppsättning siffror med <> . I allmänhet kan du använda IN(...) , men i ditt speciella fall bör du använda BETWEEN 100000 and 999999 och undvik behovet av en RANGE fungera.
  3. Om du bara vill ha ett nummer ska gränsen vara 1, inte något slumpmässigt. Vanligtvis för att välja slumpmässiga objekt använder du ORDER BY RAND() .

Testa att använda den här frågan:

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

Om du vill hitta ett nummer som inte finns i din tabell och de tillgängliga numren inte är nära utarmning (säg att mindre än 80 % är tilldelade) skulle ett bra tillvägagångssätt vara att generera slumptal och kontrollera om de är tilldelade tills du hittar ett som inte 't.

En ren MySQL-lösning kan existera men jag tror att den behöver några vridna kopplingar, slumpmässigt och modul.



  1. IN-klausulbegränsning i SQL Server

  2. MySQL:Du kan inte ange måltabell för uppdatering i FROM-satsen

  3. Laravel 5.5 pivot join för att få pivotvärden med huvud MySQL-resultat

  4. Hur man får nullbar DateTime ur databasen