Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1175510957
Novice
2007-04-02 14:49
2007.05.27
Процедуры и функции в DLL


3-1165474104
George
2006-12-07 09:48
2007.05.27
Права записи в InterBase


2-1178727526
Dmitry_177
2007-05-09 20:18
2007.05.27
Ограниченное количество цифр в Edit при вставлении


15-1177873061
FesRV
2007-04-29 22:57
2007.05.27
DelphiX


2-1178564085
Polly
2007-05-07 22:54
2007.05.27
Помогите Блин!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский