This is an old revision of the document!
Erste freie ID einer Tabelle ermitteln
zB. Wenn wir eine ID-Reihe haben 1,2,3,4,5,7,8,15 dann ist die erste ungenutzte id die 6.
SELECT MIN(newIds.newId) AS firstNotUsedId FROM # jeweils die nächst höhere ID ermitteln (SELECT id + 1 AS newId FROM test) AS newIds # und mit der Tabelle zurückverknüpfen LEFT JOIN (SELECT id FROM test ) AS ids ON newIds.newId = ids.id WHERE ids.id IS NULL;
Zur Erklärung: Ich ermittle auf jeden Datenstz die Nächst höhere ID
SELECT id + 1 AS newId FROM test
An diese hänge ich die Tabelle mittels eines LEFT JOIN Daraus nehme ich alle newId die in der Tabelle nicht als ID bestehen. Zuguter letzt lese ich mit min() die klienste daraus aus.
ACHTUNG!
Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwieschen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann.