Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > СУБД, общие вопросы > Первое несуществующее число


Автор: Гость_Vasya 13.5.2005, 11:35
Здраствуйте!

Есть таблица с полем, в котором хранятся уникальные числа.
Требуется найти первое число , которого не в таблице, причем оно меньше максимального, например:
из чисел 1, 2, 5 требуется найти 3. Как это осуществить с помощью SQL запроса?
Спасибо!

Автор: Akina 13.5.2005, 12:26
Никак.

SQL умеет делать выборку только из существующих данных, а ты хочешь получить НЕСУЩЕСТВУЮЩИЕ.

Автор: gas1979 13.5.2005, 13:02
а если выборка: 1, 2, 3, 5, 6, 8, 10
то какое число: 4 или 9
из sql ты не вытащишь не одно не другое, но если вытащишь существующие то программно
если 4, то перебором и условием присвой новое число
если 9, то в обратную сторону

Автор: igon 13.5.2005, 14:43
Например, так
Код

Select Min(ID) + 1
  From (Select d.ID
          from myTable d
        Minus
        Select a.ID
          From myTable a, myTable b
          Where a.ID + 1 = b.ID)

или так
Код

Select min(d.ID)  + 1
  from myTable d
  Where d.ID Not In (Select a.ID
                       From myTable a, myTable b
                       Where a.ID + 1 = b.ID)

Автор: Akina 13.5.2005, 15:09
igon
1) Не каждый SQL поддерживает Minus
2) На таблице с контентом 2, 3, 5, 6 он даст не 1, а 4...

Автор: Vit 15.5.2005, 10:19
Сделать ещё одну таблицу со всеми числами и делать запрос уже из двух таблиц

Автор: igon 15.5.2005, 16:02
to Akina
Цитата
1) Не каждый SQL поддерживает Minus

В вопросе не указана БД, к сожалению. Не указана, однако, и потребность в универсальном SQL запросе, пригодном для любых БД. В случае неподдержки Minus - второй вариант
Цитата
2) На таблице с контентом 2, 3, 5, 6 он даст не 1, а 4...

Граничные условия я и не пытался рассматривать, чтобы не усложнять. Так, приведенные Select`ы некорректно сработают и для последовательности без "дырок" (выдадут ID, бОльший максимального).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)