Nächste Freie Lücke in Datensätzen
Folgendes SQL Statement ermittelt die nächsten freien Datensätze innerhalb einer teilweise gefüllten Tabelle:
SELECT
t1.id + 1 AS id
FROM
tabelle t1
WHERE
t1.id + 1 NOT IN (SELECT t2.id FROM tabelle t2 WHERE t2.id = t1.id + 1)
ORDER BY t1.id ASC
Ausgebend davon das die tabelle bereits die id’s 1, 2, 4, 5 und 80 beinhaltet, gibt obiges SQL Statement die id’s 3, 6 und 81 zurück.
Getestet habe ich das ganze mit MS-SQL 2000 sowie MySQL-5.
Ist die Tabelle leer liefert das SQL Statement keinen Datensatz zurück.
Auf dem betreffenden Feld (in diesem Beispiel “id”) sollte aus Performance Gründen natürlich ein Index liegen.
Ist man nur an dem ersten freien Datensatz interessiert kann ein “TOP 1″ oder “LIMIT 1″ an passender Stelle angefügt werden.
Ist man an dem größten Freiem Wert interessiert (hier wäre dies 81) sortiert man einfach absteigend (ORDER BY t1.id DESC).