![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выбор всех чсловых значений которых нет в таблице... [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]Только проехать курсором, получив временную таблицу с отсутствующими номерами, а уж из нее потом выбирай что хочешь.