Главная страница
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.035 c
3-1173172482
VadimSpb
2007-03-06 12:14
2007.05.27
Скорость поиска


15-1177570916
Kerk
2007-04-26 11:01
2007.05.27
Приключения главного скаута Челси в России


15-1177771870
исследователь
2007-04-28 18:51
2007.05.27
Сортировка матрицы


2-1178790029
zero
2007-05-10 13:40
2007.05.27
Запретить добовление новой строки в DBGridEh


15-1177844022
SerJaNT
2007-04-29 14:53
2007.05.27
Вопрос по CSS