Вниз
Скачать: CL | DM;

Помогите по ХП в 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.032 c
2-1178620054
Neket
2007-05-08 14:27
2007.05.27
Закрепить область в Excel


15-1177661179
Sergey13
2007-04-27 12:06
2007.05.27
В Санкт-Петербурге скончался Кирилл Лавров


15-1177875190
ArtemESC
2007-04-29 23:33
2007.05.27
Паскаль-парсер...


15-1177508337
начинающий
2007-04-25 17:38
2007.05.27
Дауншифтинг


5-1154280091
askfor
2006-07-30 21:21
2007.05.27
проблема с desingEditor и Proxies..




   Наверх