Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
ВнизКак сделать выборку по отсутствующем значениям Найти похожие ветки
← →
SL57 (2003-02-07 11:23) [0]Если есть посчледовательность данных
типа
1
2
3
5
6
7
8
10
Как сделать выборку, результатом которой будет
набор записей пропущенных из последовательности.
Т.е
4
9
← →
passm (2003-02-07 11:27) [1]SL57 (07.02.03 11:23)> Пахнет рекурсивным запросом :)
СУБД?
← →
Виталий Панасенко (2003-02-07 12:19) [2]select * from tbl1 t1 where t1.key_field not in (select t2.key_field from tbl1 t2)
← →
dimis (2003-02-07 12:26) [3]
> Виталий Панасенко (07.02.03 12:19)
> select * from tbl1 t1 where t1.key_field not in (select
> t2.key_field from tbl1 t2)
по-моему этот запрос не выдаст ничего
все-таки тип СУБД хорошо бы узнать
← →
NDeu (2003-02-07 14:11) [4]select * from tbl1 t1 where t1.key_field not in (1,2,3,5,6,7,8,10)
← →
passm (2003-02-07 14:55) [5]NDeu © (07.02.03 14:11)> А если строк сотни тысяч? :)
← →
NDeu (2003-02-07 15:31) [6]
> 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 2 t2)
← →
dimis (2003-02-07 16:16) [7]куда пропал автор
вопрос интересный
← →
passm (2003-02-07 17:24) [8]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)
← →
ЮЮ (2003-02-08 03:28) [9]Если достаточно получить не все пропущенные значения 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
← →
Bis (2003-02-10 10:52) [10]пиши или не запросом, а программой, но будет долго.
Второй способ:
заведи дополнительную таблицу, в которой только одно поле, вставь по максимуму чисел и тогда твой запрос будет просто обычным вычитанием.
Ох уж эти дырозаполнятели! И зачем гемморой на свою голову?)
← →
Sheriff (2003-02-10 13:24) [11]а кто сказал, что проверочная последовательность сама не может содержать дыр?
← →
BIS (2003-02-10 14:32) [12]2Sheriff :
если сам не просверлишь )
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c