User Tools

Site Tools


sql:snippets:firstnotusedid

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

Spielwiese

sql/snippets/firstnotusedid.txt · Last modified: 31.03.2016 09:20:46 by yaslaw