Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Первое несуществующее число 
:(
    Опции темы
Гость_Vasya
Дата 13.5.2005, 11:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здраствуйте!

Есть таблица с полем, в котором хранятся уникальные числа.
Требуется найти первое число , которого не в таблице, причем оно меньше максимального, например:
из чисел 1, 2, 5 требуется найти 3. Как это осуществить с помощью SQL запроса?
Спасибо!
  Вверх
Akina
Дата 13.5.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Никак.

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
gas1979
Дата 13.5.2005, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 5.10.2004

Репутация: нет
Всего: нет



а если выборка: 1, 2, 3, 5, 6, 8, 10
то какое число: 4 или 9
из sql ты не вытащишь не одно не другое, но если вытащишь существующие то программно
если 4, то перебором и условием присвой новое число
если 9, то в обратную сторону
PM MAIL   Вверх
igon
Дата 13.5.2005, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 3
Всего: 21



Например, так
Код

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)


Это сообщение отредактировал(а) igon - 13.5.2005, 14:50


--------------------
Хотите поговорить об этом?
PM   Вверх
Akina
Дата 13.5.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vit
Дата 15.5.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Сделать ещё одну таблицу со всеми числами и делать запрос уже из двух таблиц


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
igon
Дата 15.5.2005, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 3
Всего: 21



to Akina
Цитата
1) Не каждый SQL поддерживает Minus

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

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


--------------------
Хотите поговорить об этом?
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1437 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.