Есть табличка: 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 ============ ============ 450775 1 450776 2 450777 3 Проверяю на существование дырок: 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 ============ ============ ============ ============ 450775 1 450776 2 450776 2 450777 3 Что за ерунда? А где строка 450777 3 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 отрабатывает нормально выдавая ожидаемую 450777 3 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 -- Александр Замараев