sql >> Databasteknik >  >> RDS >> Mysql

Hur får jag första oanvända ID i tabellen?

Jag döpte din tabell till 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

Denna fråga består av två delar.

Den första delen:

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

väljer en 1 finns det ingen post i tabellen med detta id .

Den andra delen:

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

väljer ett första id i tabellen som det inte finns något nästa id för .

Den resulterande frågan väljer det minsta av dessa två värden.



  1. ladda upp flera filformat till en server med jsp och lagra sökvägen i databasen

  2. Finns det något sätt att göra en INSERT...ON DUPLICATE KEY UPDATE i Zend Framework 1.5?

  3. CodeIgniter och AJAX-formulär skickas

  4. Mysql Gruppera data efter tid