两个相同的查询,给出不同的结果

时间:2011-05-14 14:01:26

标签: sql oracle10g

我有2个查询:一个是用ANSI SQL编写的,另一个是用oracle方言编写的。 我认为他们都必须给出相同的结果集,但事实并非如此。第一个查询提供385行,第二个查询提供25行

首先:

SELECT  idclient, cl.surname, sum(sub1.s) 
    FROM client cl JOIN incomestatement incst USING(idclient)
                   JOIN (SELECT c.idincome ID, sum(inst.total) AS s  
                         FROM instalment inst JOIN credit c  USING(idcredit)
                         WHERE inst.paydate > c.paydate AND c.isloaned = 1
                         GROUP BY c.idincome) sub1 ON incst.idincome = sub1.ID
   GROUP BY idclient, cl.surname;

第二

SELECT  c.idclient, c.surname, sum(sub.s)
FROM client c, incomestatement inc,
      (SELECT sum(inst.total) as s, cr.idincome as id
       FROM instalment inst, credit cr
       WHERE inst.paydate > cr.paydate AND cr.isloaned = 1 AND cr.idcredit = inst.idcredit
       GROUP BY cr.idincome
       ) sub
WHERE c.idclient = inc.idclient AND inc.income = sub.ID
group by c.idclient, c.surname;

那么他们为什么不给出相同的结果?

2 个答案:

答案 0 :(得分:1)

我会逐步解决问题。

  1. 两个子查询是否生成相同的数据集?
    • 如果有,请继续执行第2步。
    • 如果没有,那么你有两个更简单的查询来分析和剖析。
  2. 鉴于这对子查询产生相同的答案,您可以确定Client和IncomeStatement连接是否给出相同的结果(将其视为另一个子查询)
    • 如果有,请继续执行第3步。
    • 如果没有,那么你有一对查询(一个用JOIN,一个用经典SQL表示法)来分析和剖析。
  3. 鉴于这对连接和一对子查询各自产生相同的结果,请分析为什么这些连接的连接无法正常工作。

答案 1 :(得分:0)

你做了提交吗? 您可能没有提交某些交易,因此结果可能会有所不同。