Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сопоставить ID и выявить не достающие

42K
20 ноября 2008 года
13Q
4 / / 02.10.2008
В таблице есть поле с индификационными номерами, но так получилось что они идут не по порядку (есть пропуски) как можно вывести те номера, которых нету в таблице. например в таблице есть 1,3,5 нужно вывести 2,4
39K
21 ноября 2008 года
Aristarh Dark
8 / / 07.06.2008
Первая мысль у меня появилась такая (не факт что она верная):
1. Найти максимальный номер ID (пусть будет maxID)
2. Сгенерировать временную таблицу с одним автоинкрементмым полем.
3. Добавить в нее maxID записей
4. Сделать запрос на выборку из временной таблицы тех записей которых нет в основной.
8.2K
21 ноября 2008 года
Ora-cool
211 / / 20.09.2007
1-й вопрос - зачем это нужно? И что при этом будет в остальных полях, NULL?
2-й вопрос - Какая СУБД. Господа, читайте же, наконец, правила форума!
5
21 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Aristarh Dark
Первая мысль у меня появилась такая (не факт что она верная):
1. Найти максимальный номер ID (пусть будет maxID)
2. Сгенерировать временную таблицу с одним автоинкрементмым полем.
3. Добавить в нее maxID записей
4. Сделать запрос на выборку из временной таблицы тех записей которых нет в основной.


Гениально :D

Выгружаем на клиента все IDшники упорядоченные по возрастанию. На клиенте тупо проходим по ним в одом цикле и находим промежутки недостающих ID.

11
21 ноября 2008 года
oxotnik333
2.9K / / 03.08.2007
Цитата: hardcase
Гениально :D

Выгружаем на клиента все IDшники упорядоченные по возрастанию. На клиенте тупо проходим по ним в одом цикле и находим промежутки недостающих ID.


а если записей несколько мульенов будет? гонять туда-сюда все эти данные?
Алгоритм от Aristarh Dark более оптимальный, тем более что будет производится в одном месте - на сервере.

8.2K
21 ноября 2008 года
Ora-cool
211 / / 20.09.2007
В Оракле, например, это можно сделать 1-м запросом. Поэтому и спросил автора про СУБД.
5
21 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: oxotnik333
а если записей несколько мульенов будет? гонять туда-сюда все эти данные?

Аналогично через курсор.

42K
21 ноября 2008 года
13Q
4 / / 02.10.2008
Цитата: Ora-cool
1-й вопрос - зачем это нужно? И что при этом будет в остальных полях, NULL?
2-й вопрос - Какая СУБД. Господа, читайте же, наконец, правила форума!



СУБД SQL 2005 А нужно это для того что бы узнать какие диапазоны чисел ещё не заняты.

П.С. Спасибо за помощь!!!

42K
21 ноября 2008 года
13Q
4 / / 02.10.2008
Цитата: hardcase
Гениально :D

Выгружаем на клиента все IDшники упорядоченные по возрастанию. На клиенте тупо проходим по ним в одом цикле и находим промежутки недостающих ID.



Можно об этом поподробнее? Желательно с примером или ссылками на эту тему. Нет опыта написания циклов (((

5
21 ноября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: 13Q
СУБД SQL 2005 А нужно это для того что бы узнать какие диапазоны чисел ещё не заняты.

А зачем?


Показать на T-SQL эту малость просто. Я покачто не вижу надобности вам ее реализовывать.

1
21 ноября 2008 года
kot_
7.3K / / 20.01.2000
RANGE
42K
22 ноября 2008 года
13Q
4 / / 02.10.2008
Цитата: kot_
RANGE



Я не исключаю что мой вопрос не может дать сообществу какой либо опыт и для большинства его решение кажеться очевидным (я в их число безусловно не вхожу). В конце концов достигнув определенного уровня знаний и я смогу быть кому то полезен. И уж точно вопрос не стоит рассматривать как требование поделиться со мной знаниями. Я ожидаю помощи только от тех людей, у которых есть желание её оказать.

1
22 ноября 2008 года
kot_
7.3K / / 20.01.2000
Цитата: 13Q
Я не исключаю что мой вопрос не может дать сообществу какой либо опыт и для большинства его решение кажеться очевидным (я в их число безусловно не вхожу). В конце концов достигнув определенного уровня знаний и я смогу быть кому то полезен. И уж точно вопрос не стоит рассматривать как требование поделиться со мной знаниями. Я ожидаю помощи только от тех людей, у которых есть желание её оказать.


Я лично глубоко сомневаюсь, что такие как ты какого нибудь уровня достигают. Потому что мало того что туп, не найти ответа в сети на столь простой и популярный вопрос - надо обладать фантастической тупостью - так еще и обидчив. Потому что все к чему привыкли такие как ты - это только потреблять, потреблять и потреблять.

 
Код:
create table #tmp (a int identity (1, 1), b int)

insert into #tmp (b)
select top 10000 o1.number from master..spt_values o1, master..spt_values o2
where o1.type = 'P' and o2.type = 'P'

select * from #tmp where a not in (select clientid from clientmain)

drop table #tmp

в 2005 появились дополнительные возможности - название я указал - юзай поиск.
2
22 ноября 2008 года
squirL
5.6K / / 13.08.2003
закрыто. пошел неконструктив. обсуждение личных качеств друг-друга - в личке.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог