======[SQL] First not used Id======
Erste freie ID einer Tabelle ermitteln
ACHTUNG!
Eignet sich nicht um in einer Multiuser-Umgebung die IDs zu vergeben, da zwischen ID auslesen und neuen Beitrag posten jemand anderes die ID besetzen kann.
===== Ausgangslage =====
zB. Wenn wir eine ID-Reihe haben 1,2,3,4,5,7,8,15 dann ist die erste ungenutzte id die 6.
===== Code =====
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 kleinste daraus aus.
{{tag>MySQL}}
===== Spielwiese =====
[[http://sqlfiddle.com/#!2/68751c/1|Beispiel bei sqlfiddle.com]]