Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Library: Datenbanken (https://www.delphipraxis.net/22-library-datenbanken/)
-   -   Datenbanken-Tipp: Lücken in IDs finden (https://www.delphipraxis.net/85745-datenbanken-tipp-luecken-ids-finden.html)

Jürgen Thomas 4. Feb 2007 11:34


Datenbanken-Tipp: Lücken in IDs finden
 
Mit der folgenden Abfrage werden in einer ID-Spalte einer DB-Tabelle vorhandene Lücken festgestellt:
SQL-Code:
SELECT (Id+1) AS FreieId FROM Tabelle
 WHERE (Id+1) NOT IN (SELECT Id FROM Tabelle)
 ORDER BY FreieId
Wenn nur die kleinste freie ID gesucht wird, kann dieser Befehl ergänzt werden:
SQL-Code:
//  MySQL
... LIMIT 1
//  Firebird ab 1.5
SELECT FIRST 1 ...
//  MSSQL
SELECT TOP 1 ...
Achtung: Stimmt die Variante für MSSQL wirklich? Ich arbeite nicht damit, habe es aber irgendwo aus den Tiefen meines Gedächtnisses so geholt.

Dieser Tipp ist entstanden aus der Diskussion [mysql] Autoinc fehlende Einträge von gsh. Meinen Vorschlag hat gsh geprüft und ergänzt.

Jürgen

Jelly 4. Feb 2007 11:43

Re: Datenbanken-Tipp: Lücken in IDs finden
 
Ergänzend hier mal die Syntax für 3 unterschiedliche DBMS:

MySQL (ab Version 4.1)
SQL-Code:
SELECT (Id+1) AS FreieId FROM Tabelle
WHERE (Id+1) NOT IN (SELECT Id FROM Tabelle)
ORDER BY FreieId
limit 1
Firebird
SQL-Code:
SELECT First 1 (Id+1) AS FreieId FROM Tabelle
WHERE (Id+1) NOT IN (SELECT Id FROM Tabelle)
ORDER BY Id+1
MSSQL
SQL-Code:
SELECT TOP 1 (Id+1) AS FreieId FROM Tabelle
WHERE (Id+1) NOT IN (SELECT Id FROM Tabelle)
ORDER BY Id+1


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz