| Цитата | | Этот запрос вначале найдет все дырки, выберет минимальную из них и вернет значние на 1 больше. |
Почти так, только 1 прибавляется не к найденной минимальной "дырке", а к минимальному ID, для которого при объединении таблицы самой с собой не найден ID, больший на 1. Для 1,2,4,5 запрос
| Код | select a.id, b.id from my_table a Left Join my_table b On a.id+1 = b.id
|
вернет
| Код | a.ID | b.ID --------- 1 | 2 2 | 3 3 | null 5 | 6 6 | null
|
Left [Outer] Join работает так, что
| Цитата | | For all rows in A that have no matching rows in B, Oracle returns null for any select list expressions containing columns of B |
Т.е. запрос можно "прочитать" так: "Для каждого ID из A вывести его значение и значение ID из B, для которого выполняется условие a.id+1 = b.id. Если условие не выполняется ("дырка"), вывести null. При помощи
оставляем только записи, у a.ID которых рядом - "дырка". min(a.ID) дает наименьший такой ID. Прибавление к нему 1 и дает искомое | Цитата | | минимальное число, которого нет в базе. | |