sql >> Databáze >  >> RDS >> Mysql

SELECT rozsah celých čísel v MySQL. Např. 1,2,3,4,...,n;

Problémy s vaším dotazem:

  1. Nemůžete použít range v klauzuli WHERE. Je to alias a bude definován až po provedení klauzule WHERE.
  2. I kdybyste to mohli použít, nedává smysl porovnávat číslo se sadou čísel pomocí <> . Obecně můžete použít IN(...) , ale ve vašem konkrétním případě byste měli použít BETWEEN 100000 and 999999 a vyhněte se potřebě RANGE funkce.
  3. Pokud chcete pouze jedno číslo, limit by měl být 1, ne něco náhodného. K výběru náhodných položek obvykle používáte ORDER BY RAND() .

Zkuste použít tento dotaz:

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

Pokud chcete najít číslo, které není ve vaší tabulce, a dostupná čísla nejsou téměř vyčerpána (řekněme, že je přiřazeno méně než 80 %), bylo by vhodné vygenerovat náhodná čísla a zkontrolovat, zda jsou přiřazena, dokud nenajdete takové, které je 't.

Čisté řešení MySQL může existovat, ale myslím, že potřebuje nějaké zkroucené spoje, náhodné a modulové.



  1. SELECT max(x) vrací hodnotu null; jak mohu dosáhnout toho, aby vrátil 0?

  2. Mysql vloží náhodné datum a čas v daném rozsahu data a času

  3. Jak uniknout speciálním znakům SQL v regulárním výrazu v Mysql

  4. MySql:odstranit řádky tabulky v závislosti na duplicitních hodnotách sloupců?