Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1795205
  • 博文数量: 334
  • 博客积分: 11301
  • 博客等级: 上将
  • 技术积分: 3452
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-18 10:19
个人简介

路虽弥,不行不至;事虽少,不做不成。

文章分类

全部博文(334)

文章存档

2013年(4)

2012年(19)

2011年(27)

2010年(71)

2009年(45)

2008年(15)

2007年(84)

2006年(69)

分类: Oracle

2010-03-23 16:10:34

现有如下事务明细PO#1004811
 
 
要求:现用户要求是查询净接收数量,按上图,净接收数量应该是450pcs
 
 
措施:
select rt.transaction_id,
       ph.segment1,
       rt.transaction_type,
       rt.quantity,
       rt.destination_type_code,
       rt.primary_quantity
  from po.rcv_transactions rt,
       po.po_headers_all ph
 where ph.segment1='1004811'
   and rt.destination_type_code = 'RECEIVING'
   and rt.po_header_id=ph.po_header_id
   and rt.parent_transaction_id=-1
   and not exists
 (select 'T'
          from po.rcv_transactions rt1       
         where rt.transaction_id = rt1.parent_transaction_id
           and rt1.po_header_id = rt.po_header_id
           and rt1.destination_type_code = rt.destination_type_code)
 
但这样的查询效率超慢(原因是rt.parent_transaction_id=-1)
 
改进后的SQL如下
 

select rt.transaction_id,
       ph.segment1,
       rt.transaction_type,
       rt.quantity,
       rt.destination_type_code,
       rt.primary_quantity
  from po.rcv_transactions rt,
       po.po_headers_all ph
 where ph.segment1='1004811'
   and rt.destination_type_code = 'RECEIVING'
   and rt.po_header_id = ph.po_header_id
   and not exists
 (select 'T'
          from po.rcv_transactions rt1
         where rt.transaction_id = rt1.parent_transaction_id
           and rt1.po_header_id = rt.po_header_id
           and rt1.destination_type_code = rt.destination_type_code)
     
   and not exists
 (select 'T'
          from po.rcv_transactions rt1
         where rt1.transaction_id = rt.parent_transaction_id
           and rt1.po_header_id = rt.po_header_id
           and rt1.destination_type_code = rt.destination_type_code)
 
 
 
注:在使用Not exists对同一张tables做判别时,里外的查询条件要保持一致.
 
 
 
阅读(1536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~