本帖最后由 freeyxm 于 2012-05-02 14:24:17 编辑

解决方案 »

  1.   

    找到原因了,第2条查询有问题,
    如果同一个(acct_id,user_id)下,有多条
    old_bill_id=-1,new_billid!=-1且new_value!=xxx
    的记录,则进行了多次累计,而第一条记录只进行一次累计……
      

  2.   

    1、第一个SQL,只查询a表的数据
    2、第二个SQL,如果B表有重复数据,会导致查询数据量比较大
      

  3.   

    ID,value
    1,a
    1,b
    2,c
    -----
    select ID, value from t t1 where exists(
     select 1 from t t2 where t1.id=t2.id

    ID,value
    1,a
    1,b
    2,c
    -------------
    select t1.ID, t1.value,t2.value from t t1, t t2 where t1.id=t2.id

    ID,value1,value2
    1,a,a
    1,a,b
    1,b,a
    1,b,b
    2,c,c
      

  4.   

    你这表没主键啊....那情况就复杂了...
    比如:
    test_table
    acct_id  user_id  old_billid  new_billid  old_value  new_value 
    1         2         -1          -1           1         2
    1         2         -1          -1           3         4
    这样的数据,
    用第一个SQL查询,应该是2条
    用第二个SQL查询,那就应该是4条了因为表连接是取2个表的笛卡尔积再根据条件过滤的...
    即第二个SQL查询的结果应该是
    test_table a, test_table b
    a.acct_id  a.user_id  a.old_value  a.new_value b.old_value b.new_value
    1            2          1           2           1           2
    1            2          1           2           3           4
    1            2          3           4           1           2
    1            2          3           4           3           4
    这样解释不知道清楚不清楚...我感觉你这个SQL不需要做表关联啊,只需要
    select count(*) from test_table a
    where a.new_billid=-1 and a.old_billid!=-1
    and a.new_value <> a.old_value;
    不就行了么?