Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
1-1119785382
Sower
2005-06-26 15:29
2005.07.18
Чтение из конца в начало.


3-1118205610
Ярослав
2005-06-08 08:40
2005.07.18
Диалог создания строки соеденения в ADOConnection


14-1118903822
Ломброзо
2005-06-16 10:37
2005.07.18
Подавитесь


14-1118921899
Andy BitOff
2005-06-16 15:38
2005.07.18
Посоветуйте иконки


14-1119867598
stone
2005-06-27 14:19
2005.07.18
Начальник тупой?




   Наверх