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

Comment puis-je obtenir le premier ID inutilisé dans le tableau ?

J'ai nommé votre table unused .

SELECT  id
FROM    (
        SELECT  1 AS id
        ) q1
WHERE   NOT EXISTS
        (
        SELECT  1
        FROM    unused
        WHERE   id = 1
        )
UNION ALL
SELECT  *
FROM    (
        SELECT  id + 1
        FROM    unused t
        WHERE   NOT EXISTS
                (
                SELECT  1
                FROM    unused ti
                WHERE   ti.id = t.id + 1
                )
        ORDER BY
                id
        LIMIT 1
        ) q2
ORDER BY
        id
LIMIT 1

Cette requête se compose de deux parties.

La première partie :

SELECT  *
FROM    (
        SELECT  1 AS id
        ) q
WHERE   NOT EXISTS
        (
        SELECT  1
        FROM    unused
        WHERE   id = 1
        )

sélectionne un 1 s'il n'y a pas d'entrée dans la table avec cet id .

La deuxième partie :

SELECT  *
FROM    (
        SELECT  id + 1
        FROM    unused t
        WHERE   NOT EXISTS
                (
                SELECT  1
                FROM    unused ti
                WHERE   ti.id = t.id + 1
                )
        ORDER BY
                id
        LIMIT 1
        ) q2

sélectionne un premier id dans la table pour laquelle il n'y a pas de prochain id .

La requête résultante sélectionne la plus petite de ces deux valeurs.