Есть табличка:
CREATE TABLE SYMPTOMS (
ID integer not null,
PARENT_ID integer,
ORD_NUM integer
-- отгрызено полей
CONSTRAINT PK_SYMPTOMS PRIMARY KEY (ID),
CONSTRAINT FK_SYMP2SYM_ID FOREIGN KEY (SYM_ID) REFERENCES SYMPTOMS (ID)
);
ORD_NUM - порядковый номер в отображении. Нумерация начинается с 1,
одинаковых и номеров и дырок не допускается.
Выбираю уровень:
SQL select s.ID, s.ORD_NUM from SYMPTOMS s where s.PARENT_ID = 450774;
ID ORD_NUM
4507751
4507762
4507773
Проверяю на существование дырок:
SQL select s.ID, s.ORD_NUM, s2.ID, s2.ORD_NUM
CON from SYMPTOMS s left outer join SYMPTOMS s2
CON on s.ORD_NUM + 1 = s2.ORD_NUM
CON where s.PARENT_ID = 450774 and s2.PARENT_ID = 450774
CON /*and s2.ID is null*/;
ID ORD_NUM ID ORD_NUM
4507751 4507762
4507762 4507773
Что за ерунда?
А где строка
4507773 null null
В то же время
select * from RDB$DATABASE l
left join RDB$DATABASE r on l.RDB$RELATION_ID = r.RDB$RELATION_ID + 1
возвращает одну строку все поля от l в которой null - как и ожидалось/
Запрос с not exists отрабатывает нормально выдавая ожидаемую
4507773
select s.ID, s.ORD_NUM
from SYMPTOMS s
where s.PARENT_ID = 450774
and not exists(
select 1 from SYMPTOMS s2 where s2.PARENT_ID = 450774
and s.ORD_NUM + 1 = s2.ORD_NUM
)
Что бы это могло быть?
б/р проходит без ошибок.
ОС Kubuntu 11.10 со всеми обновлениями
firebird2.5-super 2.5.0.26074-0.ds4-5 - из стандартного репозитория
firebird2.5-super Version: 2.5.1.26351.ds4-2~bpo60+1ubuntu3 - из ppa
Maintainer: Popa Adrian Marius
--
Александр Замараев