Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

проблема с вложенными запросами   Найти похожие ветки 

 
jiny   (2005-06-02 13:06) [0]

есть таблица Seria (идентификатор num_ser) и таблицы движений серий (fr1_2,fr2_2,frFil1_2,fp2_2,fp1_2,spi1_2 (идентификатор id_ser))
в сериях есть поле Goden(срок годности)
Остаток в сериях вычисляется интерактивно следующим запросом :
TmpOstTek=
COALESCE((select sum(kol) from fp1_2 where fp1_2.id_ser=s.num_ser and flag=1),0)+

COALESCE((select sum(kol) from fp2_2 where fp2_2.id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr2_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from frfil1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from spi1_2 where id_ser=s.num_ser and flag=1),0)


вычисляется все быстро, т.к. в табл. Seria и в сопутствующих таблицах движений по сериям установлены соответствующие индексы

Запрос на показ серий, имеющихся в наличии выглядит так
"select "+TmpOstTek+",s.num_ser,s.cost_zk from seria where "+TmpIsActive+TmpP_Jrn+TmpSearchPlace,
где
TmpIsActive:="isActive=1";
TmpP_Jrn:=" and p_jrn=9"; номер внутреннего журнала - не относится к вопросу
TmpSearchPlace:=TmpOstTek>0, где TmpOstTek=вышеуказанному запросу вычисления остатков серий

Вопрос :
Возможно ли в TmpSearchPlace не указывать весь запрос целиком(TmpOstTek), а просто указать что-то вроде "seria.1 колонка>0"
иначе запрос действует медленней и при еще более сложных критериях отбора вообще замедляется, чем показать все серии, если возможно, то как ?
Какой можете предложить выход ?


 
Johnmen ©   (2005-06-02 13:27) [1]

Предлагаю формализовать постановку вопроса и задать его заново.


 
jiny   (2005-06-02 14:00) [2]

Мне нужно чтобы запрос был не таким :
select
(COALESCE((select sum(kol) from fp1_2 where fp1_2.id_ser=s.num_ser and flag=1),0)+

COALESCE((select sum(kol) from fp2_2 where fp2_2.id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr2_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from frfil1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from spi1_2 where id_ser=s.num_ser and flag=1),0)) as ost_tek,num_ser,cost_zk from seria where
isActive=1 and p_jrn=9 and
(COALESCE((select sum(kol) from fp1_2 where fp1_2.id_ser=s.num_ser and flag=1),0)+

COALESCE((select sum(kol) from fp2_2 where fp2_2.id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr2_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from frfil1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from spi1_2 where id_ser=s.num_ser and flag=1),0))>0


а что-то вроде этого :

select
(COALESCE((select sum(kol) from fp1_2 where fp1_2.id_ser=s.num_ser and flag=1),0)+

COALESCE((select sum(kol) from fp2_2 where fp2_2.id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from fr2_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from frfil1_2 where id_ser=s.num_ser and flag=1),0)-

COALESCE((select sum(kol) from spi1_2 where id_ser=s.num_ser and flag=1),0)) as ost_tek,
num_ser,cost_zk from seria where
isActive=1 and p_jrn=9 and
s.ost_tek>0


это возможно ?


 
Johnmen ©   (2005-06-02 14:05) [3]

Возможно.
См. в сторону view и хранимых процедур.


 
jiny   (2005-06-02 15:34) [4]

Спасибо, в принципе я это уже реализовал в ХП, но просто напоследок хотелось бы узнать вообще возможнен ли такой вариант в прямом запросе



Страницы: 1 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.031 c
3-1118193329
paule
2005-06-08 05:15
2005.07.18
Не обновляются данные


1-1119801165
Euro
2005-06-26 19:52
2005.07.18
Modal Form


14-1119529290
X9
2005-06-23 16:21
2005.07.18
Схема советских колонок S90


14-1118924278
DeMoN-777
2005-06-16 16:17
2005.07.18
Странные письма


4-1116874602
Salvator
2005-05-23 22:56
2005.07.18
Передача звука по сети