SELECT COUNT(p.prod_id)    --结果1070877
  FROM product p
  JOIN party t ON t.party_id = p.owner_id
  LEFT OUTER prod_2_addr a ON a.prod_id = p.prod_id
                          AND a.reason_cd = 1
  LEFT OUTER JOIN (SELECT segment_id, party_id
                     FROM segment_member
                    WHERE segment_id IN (31, 32)) l ON l.party_id =
                                                       t.party_id
  LEFT OUTER JOIN customer s ON p.prod_id = s.prod_id
 WHERE s.serv_spec_id IN (467, 455, 456, 457)
   AND p.prod_spec_id IN (1, 2);        
--------------------------------------------------------------------------           
SELECT count(p.prod_id)     --结果303491
           FROM product p,
                party t,
                prod_2_addr a,
                (SELECT segment_id, party_id
                   FROM segment_member
                  WHERE segment_id IN
                        (31, 32)) l,
                customer s
          WHERE t.party_id = p.owner_id
            AND a.prod_id = p.prod_id(+)
            AND a.reason_cd = 1
            AND l.party_id = t.party_id(+)
            AND p.prod_id = s.prod_id
            AND s.serv_spec_id IN (4, 5, 6, 7)
            AND p.prod_spec_id IN (1, 2);  
            
请大伙帮忙看看,请急的,为什么下面两个语句的执行结果会不一样?
第一条在9i下执行,结果为1070877, 第二条在8i下执行,结果为303491.
如果以第一条语句为标准,第二条语句哪里不对了,该如何改呢?谢谢!

解决方案 »

  1.   

    另外,对比执行如下:
    SELECT COUNT(p.prod_id)
      FROM FROM product p,
                    party t,
           (SELECT prod_id
              FROM prod_2_addr
             WHERE reason_cd = 1) a
    WHERE t.party_id = p.owner_id
       AND (a.prod_id = p.prod_id(+));--此时的结果为4232796
    而语句:
    SELECT COUNT(p.prod_id)
      FROM product p
      JOIN party t ON t.party_id = p.owner_id
      LEFT OUTER prod_2_addr a ON a.prod_id = p.prod_id
                              AND a.reason_cd = 1--执行的结果是6449133
    问题就从这里开始了,望有高手帮忙分析分析,不胜感谢!