Здравствуйте!
Объясните, где я не прав. Вот тестовый пример:
Создаем таблицу:
create table t_tree (id integer primary key,
id_top integer,
name varchar(12) );
Заполняем данными:
-- ID ID_TOP NAME
-- 1 Запись 1
-- 2 1 Запись 1.1
-- 3 2 Запись 1.1.1
-- 4 2 Запись 1.1.2
-- 5 1 Запись 1.2
INSERT INTO T_TREE (ID, ID_TOP, NAME) VALUES (1, NULL, 'Запись 1');
INSERT INTO T_TREE (ID, ID_TOP, NAME) VALUES (2, 1, 'Запись 1.1');
INSERT INTO T_TREE (ID, ID_TOP, NAME) VALUES (3, 2, 'Запись 1.1.1');
INSERT INTO T_TREE (ID, ID_TOP, NAME) VALUES (4, 2, 'Запись 1.1.2');
INSERT INTO T_TREE (ID, ID_TOP, NAME) VALUES (5, 1, 'Запись 1.2');
commit;
А теперь делаем запрос на записи, не имеющие подчиненных
select t.name from t_tree t
where t.id not in (select t1.id_top from t_tree t1);
Получаем пустой результат.
Если в условие in добавить условие, то результат получается правильный
(логичный с моей точки зрения), хотя на FB 1.5. и первый запрос
возвращал 3 записи (ID=3, 4, 5).
select t.name from t_tree t
where t.id not in (select t1.id_top from t_tree t1 where t1.id_top is
not null);
Проверено на FB 2.0 и FB 2.0.1
С уважением,
Стариков Алексей.