![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите по ХП в FB [D6, XP]
Lab © (2007-05-04 16:09:00)Здравствуйте!
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 записей, если в таблице b0 записей.
Тот же запрос, выполненный в SQLEditor выводит
всю записи таблицы a, как собственно и планировалось.
Может есть какие-то особенности при выполнении
запросов в хранимой процедуре?
PS. C join та же история.
Lab (2007-05-07 16:33:00) [1]to Johnmen
я тоже не верил. Пока не проверил.
Короче, в данном случае проще сделать чистым запросом,
который гарантировано работает, чем париться
с хранимой процедурой. Спасибо, что пытались помочь.
Johnmen (2007-05-05 18:02:00) [2]
> Вопрос в том, почему запрос перестаетработать как надо,
> если вставлять в хранимую процедуру.
"Не верю!" (с)
ЗЫ
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-05 15:20:00) [3]С 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 13:46:00) [4]
> PS. C join та же история.
Код истории - в студию.
Lab (2007-05-05 06:32:00) [5]Извиняюсь, что не написал сразу, но:
>Я то-то не понял, как ты планируешь, если у тебя в одном случае 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.
Desdechado (2007-05-04 18:54:00) [6]> всю записи таблицы a, как собственно и планировалось.
Я то-то не понял, как ты планируешь, если у тебя в одном случае NOT IN, а в другом IN