«

»

Sep
11

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).

Hinterlasse eine Antwort

Ihre E-Mail-Adresse wird nicht veröffentlicht.

Sie können diese HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

What is 3 + 3 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)