Главная страница
    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.45 MB
Время: 0.043 c
2-1178280581
Lab
2007-05-04 16:09
2007.05.27
Помогите по ХП в FB


2-1178557712
Антон Шестаков
2007-05-07 21:08
2007.05.27
Чтение из базы


15-1178104787
ShadowMan
2007-05-02 15:19
2007.05.27
Метка перехода на определенное место в файле


2-1178534632
Kostafey
2007-05-07 14:43
2007.05.27
Использование результата запроса Select в Update


15-1177929978
Nic
2007-04-30 14:46
2007.05.27
На какие зарубежные сайты стоит сабмитить Shareware-проект?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский