Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выбор всех чсловых значений которых нет в таблице... [D5, MSSQL]


Vick ©   (2003-02-03 12:59:00) 

Доброго всем утра. Может кто подскажет как решить проблему такого плана: есть таблица
A B C
-------
1 1 1
2 a c
3 s b
4 r s
6 g g
7 f d
9 s a
10 d e

в поле А есть пропущенные номера, вот их нужно каим-то образом отлавливать запросом и находить минимальный. Как это сделать?


MOA   (2003-02-03 14:07:00) [1]

Вот так:

SELECT MIN(t.A+1) from t AS t WHERE NOT EXISTS (SELECT * FROM t AS t1 WHERE t1.A=(t.A+1))


Владислав   (2003-02-03 14:04:00) [2]

select top 1 t1.A + 1
from table1 t1
where not exists(
select *
from table1 t2, table1 t3
where t2.A = t3.A - 1
and t1.A = t2.A
)
order by t1.A


MOA   (2003-02-03 14:03:00) [3]

Ошибся, прошу прощения...


MOA   (2003-02-03 14:00:00) [4]

Например, так:

SELECT MIN(t.A) from t AS t WHERE NOT EXISTS (SELECT * FROM t AS t1 WHERE t1.A=t.A)

Удачи!


stone   (2003-02-03 13:54:00) [5]

На самом деле все зависит от цели. Если нужно найти просто первое пропущенное значение, то нет необходимости во временной таблице.

declare
@Min integer,

set @Min=1 (или 0, смотря что надо)
while exists(select A from ТвояТаблица where A=@Min)
begin
set @Min=@Min+1
end

select @Min


Vick   (2003-02-03 13:47:00) [6]

Ага, спасибо, получилось :)))))


stone   (2003-02-03 13:29:00) [7]

Можно и так, но это в принципе то же самое

declare
@Min integer,
@Max integer

create table #TmpTable(MyField integer)

set @Min=1 (или 0, смотря что надо)
set @Max = select Max(A) from ТвояТаблица
while @Min<>@Max
begin
if not exists(select A from ТвояТаблица where A=@Min)
insert into #TmpTable(MyField) values(@Min)
end

select min(MyField) from #TmpTable
.... ну и т.д.


Vick   (2003-02-03 13:18:00) [8]

А без курсора никак нельзя???


stone   (2003-02-03 13:04:00) [9]

Только проехать курсором, получив временную таблицу с отсутствующими номерами, а уж из нее потом выбирай что хочешь.


Наверх

Титульная страница Поиск, карта сайта Написать письмо