CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

请大家帮忙给改改!很急!谢谢了!

楼主NullError(Null)2005-07-02 11:00:42 在 MS-SQL Server / 基础类 提问

以下是我的源语句,本来只是对一些表简单的查询大概可以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

相关问题

  • 一个SQL请大家给我改改
  • 救急!!!大家帮忙改改!马上给分
  • 请各位帮忙改改这个分页类的问题,急等(送分!)
  • 大家帮忙看看,改改错 !!!急
  • 急救:用c++实现“奴隶主杀奴隶”程序的问题,请帮我看看哪里错了,改改!!
  • 帮忙给改改版方案。。
  • 我已经给了初值了怎么还会nullpointerexception?请大家帮忙!看看怎么改改?谢谢
  • 求助,请各位大哥给我改改我下面这段程序的错误,谢谢!
  • 求助,请各位大哥给我改改我下面这段程序的错误,谢谢!
  • 那位大哥帮帮我改改,急啊!!!!!!!!!

关键词

  • os
  • 语句
  • ps
  • prd
  • tf
  • prdt
  • qty
  • mp
  • knd
  • mrp

得分解答快速导航

  • 帖主:NullError
  • phantomMan
  • filebat

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo