Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uzyskać pierwszy nieużywany identyfikator w tabeli?

Nazwałem Twoją tabelę 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

To zapytanie składa się z dwóch części.

Pierwsza część:

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

wybiera 1 czy w tabeli nie ma wpisu o tym id? .

Druga część:

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

wybiera pierwszy id w tabeli, dla której nie ma następnego id .

Wynikowe zapytanie wybiera najmniejszą z tych dwóch wartości.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najszybszy sposób na zrzucenie obiektu słownika Pythona (dict) do tabeli MySQL?

  2. Jak połączyć tabele z SQL?

  3. jak mogę zwrócić wiele rekordów bazy danych z klasy w programowaniu OOP?

  4. Jak połączyć LIKE z IN w zapytaniu MYSQL?

  5. PHP — jak sprawdzić, czy rekord został pomyślnie usunięty