select max(A.ID)+1 from TBL A where (select count(*) from TBL B where B.ID<=A.ID)=A.ID
Ale v praxi bude efektivnější napsat si proceduru, která první díru najde cyklem.
coalesce. Tak jako tak bude řešení procedurou pořád efektivnější než řešení subselectem - ať už vaše nebo moje.
Pokud bychom ukoncili cviceni "Zaklady SQL" a vratili se k tematu :-) Myslim, ze nikdo nezpochybnil, ze Vas system je slozity. Pouze bylo upozorneno na to, ze funkcne podobny system by dokazal napsat kdokoliv po precteni knihy "Zaklady MySQL" za 21 dni. Tim nerikal, ze ta aplikace bude mit stejnou architekturu, jako ta Vase. Treba se ten clovek rozhodne, ze na data bude sahat prostrednictvim LDAPu (abychom nezustavali porad u SQL) :-)