Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie bekomme ich die erste unbenutzte ID in der Tabelle?

Ich habe Ihre Tabelle unused genannt .

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

Diese Abfrage besteht aus zwei Teilen.

Der erste Teil:

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

wählt eine 1 aus gibt es keinen Eintrag in der Tabelle mit dieser id .

Der zweite Teil:

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

wählt eine erste id aus in der Tabelle, für die es keine nächste id gibt .

Die resultierende Abfrage wählt den kleinsten dieser beiden Werte aus.