Есть табличка:
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

-- 
Александр Замараев

Ответить