Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
ВнизПомогите по ХП в FB Найти похожие ветки
← →
Lab (2007-05-04 16:09) [0]Здравствуйте!
Firebird 1.5, IBExpert
Есть 3 таблицы, последовательно связанные по integer полям:
a.id=b.a_id
b.c_id=c.id
Выполняя хранимую процедуру:
for
select id from a where a.id not in(
select distinct a_id from b where c_id in(
select distinct id from c where c.id=:cidvar))
into :outvar
do suspend
Получаем 0 записей, если в таблице b 0 записей.
Тот же запрос, выполненный в SQLEditor выводит
всю записи таблицы a, как собственно и планировалось.
Может есть какие-то особенности при выполнении
запросов в хранимой процедуре?
PS. C join та же история.
← →
Desdechado © (2007-05-04 18:54) [1]> всю записи таблицы a, как собственно и планировалось.
Я то-то не понял, как ты планируешь, если у тебя в одном случае NOT IN, а в другом IN
← →
Lab (2007-05-05 06:32) [2]Извиняюсь, что не написал сразу, но:
>Я то-то не понял, как ты планируешь, если у тебя в одном случае NOT IN,
>а в другом IN
План такой:
1. из таблицы c отбираем записи с id равным cidvar
2. из таблицы b отбираем записи с c_id равным id из таблицы c
3. из таблицы a отбираем записи с id НЕ равным a_id из таблицы b
Т.е. если в таблицах есть запись a.id=b.a_id и b.c_id=c.id, то она в конечном
выводе не отображается. Следовательно, если таких записей нет вообще,
то отображается вся таблица a.
Вне процедуры запрос работает, как положено. В процедуре при пустой
таблице b или c - выводится 0 записей из таблицы a.
← →
Johnmen © (2007-05-05 13:46) [3]
> PS. C join та же история.
Код истории - в студию.
← →
Lab (2007-05-05 15:20) [4]С join вроде так:
select id from a where id not in(
select id from a
left join b on a.id=b.a_id
left join c on b.c_id=c.id
where c.id=:cidvar)
но мне не до скоростей. сейчас лишь бы заработало.
Не важно как запрос написать - через join или через
подзапросы. Вопрос в том, почему запрос перестает
работать как надо, если вставлять в хранимую процедуру.
И как сделать чтоб он был рабочим.
← →
Johnmen © (2007-05-05 18:02) [5]
> Вопрос в том, почему запрос перестаетработать как надо,
> если вставлять в хранимую процедуру.
"Не верю!" (с)
ЗЫ
select id from a
join b on a.id<>b.a_id
join c on b.c_id=c.id
where c.id=:cidvar
← →
Lab (2007-05-07 16:33) [6]to Johnmen
я тоже не верил. Пока не проверил.
Короче, в данном случае проще сделать чистым запросом,
который гарантировано работает, чем париться
с хранимой процедурой. Спасибо, что пытались помочь.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.045 c