Ich habe Ihre Tabelle unused
genannt .
SELECT id
FROM (
SELECT 1 AS id
) q1
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
UNION ALL
SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
ORDER BY
id
LIMIT 1
Diese Abfrage besteht aus zwei Teilen.
Der erste Teil:
SELECT *
FROM (
SELECT 1 AS id
) q
WHERE NOT EXISTS
(
SELECT 1
FROM unused
WHERE id = 1
)
wählt eine 1
aus gibt es keinen Eintrag in der Tabelle mit dieser id
.
Der zweite Teil:
SELECT *
FROM (
SELECT id + 1
FROM unused t
WHERE NOT EXISTS
(
SELECT 1
FROM unused ti
WHERE ti.id = t.id + 1
)
ORDER BY
id
LIMIT 1
) q2
wählt eine erste id
aus in der Tabelle, für die es keine nächste id
gibt .
Die resultierende Abfrage wählt den kleinsten dieser beiden Werte aus.