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

Comment trouver des lacunes dans la numérotation séquentielle dans mysql ?

Mettre à jour

ConfexianMJS a fourni beaucoup mieux réponse en termes de performances.

La réponse (pas aussi rapide que possible)

Voici la version qui fonctionne sur une table de n'importe quelle taille (pas seulement sur 100 lignes) :

SELECT (t1.id + 1) as gap_starts_at, 
       (SELECT MIN(t3.id) -1 FROM arrc_vouchers t3 WHERE t3.id > t1.id) as gap_ends_at
FROM arrc_vouchers t1
WHERE NOT EXISTS (SELECT t2.id FROM arrc_vouchers t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL
  • gap_starts_at - premier identifiant dans l'écart actuel
  • gap_ends_at - dernier identifiant dans l'écart actuel