Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: 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 вся ветка

Текущий архив: 2007.05.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
2-1178279969
Бульбаш
2007-05-04 15:59
2007.05.27
Ошибка при запуске exe-шника.


15-1177698597
koha
2007-04-27 22:29
2007.05.27
Можно ли к форуму подключать какой нибудь другой программой?


3-1173306371
databaser
2007-03-08 01:26
2007.05.27
Сравнение запросов


15-1177567615
MeF Dei Corvi
2007-04-26 10:06
2007.05.27
Задача: WebBrowser и воровство


2-1178638279
Bullfrog
2007-05-08 19:31
2007.05.27
GroupBox&amp;Label