请大家帮忙给改改!很急!谢谢了!
以下是我的源语句,本来只是对一些表简单的查询大概可以1分钟左右就可以出来数据的,可是后来加了很多字段和表,执行后慢的就显示不出数据来了,大家帮帮忙给改改,怎样提高效率。
另外我这里有几个疑点。
1、语句中left join 中加的条件放到后面where条件中后我的结果就不一样了,而且感觉速度也不一样,我不知道两者的区别是在哪里。
2、在第一个left join 中我用条件(t2.knd='4')将knd字段所定到等于4的记录,可是结果中还是出现了不等于4的记录。
谢谢各位了
select DISTINCT a.mp_no,c.mend,a.so_no,a.mrp_no_so,d.qty,e.qcqty,a.prd_no,a.prd_name,a.ut as unit,a.qtysm,a.qty_so,b.qty as IPOQty,b.qty_ps,b.est_dd
from (select t1.mp_no,t1.so_no,t1.mrp_no_so,t1.prd_no,t2.name as prd_name,(t1.qty-t1.qty_on_rsv) as qtysm,t1.qty_so,t2.ut
from (select mp_no,so_no,mrp_no_so,prd_no,qty,qty_on_rsv,sum(qty_so) as qty_so
from tf_mp1 where mp_no='MP57010001' group by mp_no,so_no,mrp_no_so,prd_no,qty,qty_on_rsv ) t1 left join prdt t2 on t1.prd_no=t2.prd_no and t2.knd='4') a
left join (select prd_no,sum(qty) as qty from Prdt1 group by prd_no) d on a.mrp_no_so=d.prd_no
left join (select prd_no,sum(qty_rk) as QCQty from prdt1 group by prd_no) e on a.prd_no=e.prd_no
left join (select os_no,prd_no,itm,est_dd,sum(qty) as qty,sum(qty_ps) as qty_ps from tf_pos group by os_no,prd_no,itm,est_dd) b on a.SO_NO=b.os_no and a.MRP_NO_SO=b.prd_no
left join (select mend,os_no,itm from tf_pos_z group by mend,os_no,itm) c on a.SO_NO=c.OS_NO and b.itm=c.itm
问题点数:50、回复次数:10Top
1 楼phantomMan()回复于 2005-07-02 11:50:36 得分 40
这么长的代码和left join,不知道你的具体要求,怎么优化啊!
最好直接给出表和查询的结果,然后别人才好修改Top
2 楼filebat(Mark)回复于 2005-07-02 11:53:04 得分 10
你用的表别名太多了.
你先给出表结构, 再说一下实现什么功能吧.
对着你那个源程序改太累了Top
3 楼kzh80000(如鱼得水)回复于 2005-07-02 11:54:32 得分 0
看得都累,呵呵Top
4 楼NullError(Null)回复于 2005-07-02 12:30:40 得分 0
这个说起来,很麻烦阿!
代码没什么麻烦的阿,可能就是表多了一些!Top
5 楼phantomMan()回复于 2005-07-02 12:40:26 得分 0
给出要求,说不定有更好的方法,不用这么多的表链接,就能够完成Top
6 楼NullError(Null)回复于 2005-07-02 13:34:07 得分 0
表结构如下,不知道说得清不清楚
TF_MP1 (MP_NO,SO_NO,MRP_NO_SO,PRD_NO,QTYSM,QTY_SO)
PRDT (PRD_NO,PRD_NAME,UNIT,KND)
PRDT1 (PRD_NO,QTY,QTY_RK)
TF_POS (OS_NO,PRD_NO,ITM,EST_DD,IPOQTY,QTY_PS)
TF_POS_Z (MEND,OS_NO,ITM)
要求:
以TF_MP1表为基础
其中
TF_MP1和PRDT的关系:以TF_MP1.PRD_NO=PRDT.PRD_NO的关系,取出TF_MP1.MP_NO='MP57010001' AND PRDT.KND='4'的TF_MP1.MP_NO,TF_MP1.SO_NO,TF_MP1.MRP_NO_SO,TF_MP1.PRD_NO,TF_MP1.QTYSM,TF_MP1.QTY_SO,PRDT.NAME,PRDT.KND,PRDT.UNIT
TF_MP1和PRDT1的关系: 以TF_MP1.PRD_NO=PRDT1.PRD_NO通过GROUP BY PRDT1.PRD_NO取出SUM(QTY)和以TF_MP1.MRP_NO_SO=PRDT1.PRD_NO的关系通过GROUP BY PRDT1.PRD_NO取出SUM(QTY_RK)
TF_MP1和TF_POS的关系:以TF_MP1.SO_NO=TF_POS.OS_NO AND TF_MP1.MRP_NO_SO=TF_POS.PRD_NO为条件 取出TF_POS的SUM(IPOQTY)和SUM(QTY_PS)和EST_DD
TF_POS和TF_POS_Z的关系: 以TF_POS.OS_NO=TF_POS_Z.OS_NO and TF_POS.ITM=TF_POS_Z.ITM为条件取出TF_POS_Z.MEND
Top
7 楼NullError(Null)回复于 2005-07-02 16:50:44 得分 0
晕!
又沉了?Top
8 楼NullError(Null)回复于 2005-07-04 08:49:18 得分 0
有人能帮我看看吗?Top
9 楼phantomMan()回复于 2005-07-04 14:43:07 得分 0
看了你的结构和要得到的结果,不明白为什么你会把上面写在一个语句当中
第一种情况:
select TF_MP1.MP_NO,TF_MP1.SO_NO,TF_MP1.MRP_NO_SO,
TF_MP1.PRD_NO,TF_MP1.QTYSM,TF_MP1.QTY_SO,
PRDT.NAME,PRDT.KND,PRDT.UNIT
from TF_MP1,PRDT
where TF_MP1.PRD_NO=PRDT.PRD_NO and
TF_MP1.MP_NO='MP57010001' AND
PRDT.KND='4'
第二种情况,似乎与表TF_MP1无关:
select PRD_NO,sum(QTY),sum(QTY_RK)
from PRDT1
group by PRD_NO
第三种情况,因为不知道你的具体分组情况:
如果是OS_NO,PRD_NO组合键时:
select EST_DD,sum(IPOQTY),sum(QTY_PS)
from TF_POS
group by OS_NO,PRD_NO
第四种情况:
select TF_POS_Z.MEND from TF_POS,TF_POS_Z
where TF_POS.OS_NO=TF_POS_Z.OS_NO
and TF_POS.ITM=TF_POS_Z.ITMTop
10 楼NullError(Null)回复于 2005-07-05 08:45:40 得分 0
谢谢phantomMan,这个问题 我用别的方式解决了,谢谢你!
Top




