![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как сделать выборку по отсутствующем значениям
SL57 © (2003-02-07 11:23:00)Если есть посчледовательность данных
типа
1
2
3
5
6
7
8
10
Как сделать выборку, результатом которой будет
набор записей пропущенных из последовательности.
Т.е
4
9
BIS (2003-02-10 14:32:00) [1]2Sheriff :
если сам не просверлишь )
Sheriff (2003-02-10 13:24:00) [2]а кто сказал, что проверочная последовательность сама не может содержать дыр?
Bis (2003-02-10 10:52:00) [3]пиши или не запросом, а программой, но будет долго.
Второй способ:
заведи дополнительную таблицу, в которой только одно поле, вставь по максимуму чисел и тогда твой запрос будет просто обычным вычитанием.
Ох уж эти дырозаполнятели! И зачем гемморой на свою голову?)
ЮЮ (2003-02-08 03:28:00) [4]Если достаточно получить не все пропущенные значения CODE, а первые из "непрерывного блока пропущенных значений CODE", то можно так:
SELECT (c.Code + 1) FreeCode
FROM Employment c LEFT JOIN Employment n on c.Code + 1 = n.Code
WHERE n.Code is NULL
passm (2003-02-07 17:24:00) [5]NDeu © (07.02.03 15:31)> А если нет tbl1. Есть только одна таблица TABLE1 (ID INTEGER...), где PRIMARY KEY (ID). И нужно найти "дырки" в ID.
На DB2 это выглядело бы так:
WITH NUMS(NUM) AS
(VALUES(1))
UNION ALL
SELECT NUMS.NUM + 1
FROM NUMS
WHERE NUMS.NUM < (SELECT MAX(ID) FROM TABLE1))
SELECT NUMS.NUM
FROM NUMS
WHERE NUMS.NUM NOT IN (SELECT ID FROM TABLE1)
dimis (2003-02-07 16:16:00) [6]куда пропал автор
вопрос интересный
NDeu (2003-02-07 15:31:00) [7]
> passm © (07.02.03 14:55)
См. вопрос автора ;)
Иначе - Виталий Панасенко (07.02.03 12:19) с учетом dimis (07.02.03 12:26)
select * from tbl1 t1 where t1.key_field not in (select t2.key_field from tbl 2t2)
passm (2003-02-07 14:55:00) [8]NDeu © (07.02.03 14:11)> А если строк сотни тысяч? :)
NDeu (2003-02-07 14:11:00) [9]select * from tbl1 t1 where t1.key_field not in (1,2,3,5,6,7,8,10)
dimis (2003-02-07 12:26:00) [10]
> Виталий Панасенко (07.02.03 12:19)
> select * from tbl1 t1 where t1.key_field not in (select
> t2.key_field from tbl1 t2)
по-моему этот запрос не выдаст ничего
все-таки тип СУБД хорошо бы узнать
Виталий Панасенко (2003-02-07 12:19:00) [11]select * from tbl1 t1where t1.key_field not in (select t2.key_field from tbl1 t2)
passm (2003-02-07 11:27:00) [12]SL57 (07.02.03 11:23)> Пахнет рекурсивным запросом :)
СУБД?