我现在有三张表a,b,c.其中a是主表,内联b,c.
现在的问题是b表中有符合条件的记录5条,c表中有符合条件的记录2条,当连接了a表后,查询结果集变为了10条,而这时如果要对b,c表中的数据求和就会产生错误。请问如何解决。小弟谢过先!!

解决方案 »

  1.   

    a表中有多少条数据呢?
    用inner join 试试
      

  2.   

    a id    b id money    c id count
      1        1   10        1   5
      2        1   15        1   6
               1   20        2   7
               1   25        3   5 
               1   30
               2   20现在数据是这样的
    如果用a inner join b a.id=b.id inner join c a.id=d.id  and a.id=1 就会得到10条记录
    这样用sum(b.money)就会得到10条记录的总和,就是多了一倍,而sum(c.count)就多了5倍。
    我现在想得到b里面 id=1的money总和,c里id=1里的总和。不知道现在这样解释清不清楚了,请大虾们指教!   
      

  3.   

    inner join b a.id=b.id inner join c a.id=d.id  and a.id=1
    。。怎么还有个d.id?
    select a.id,sum(b.money),sum(c.count) from a inner join b on a.id =b.id inner join c on a.id=c.id group by a.id
      

  4.   

    SELECT SUM(B.MONEY),SUM(C.COUNT),A.AID FROM TABLEA A,TABLEB B,TABLEC C
     WHERE B.BID=A.AID AND C.CID=A.AID AND A.AID=1
      

  5.   

    问题是只要a同时连接b,c就会得到b*c的记录数,这样再求和就有问题
      

  6.   

    SELECT SUM(B.MONEY),A.AID FROM TABLEA A,TABLEB B
    WHERE B.BID=A.AID AND A.AID=1
    UNION
    SELECT SUM(C.COUNT),A.AID FROM TABLEA A,TABLEC C 
    WHERE C.CID=A.AID AND A.AID=1
      

  7.   

    where条件里相连接的字段要是一对多或者是多对一的关系,不然会产生笛卡尔值,也就是出现你所描述的现象.从你的描述里看,你的a表中与b,c表连接的字段不是unique的.
    你可以先对b,c分别group by求和,a 也group by,然后再是三表相连接.
      

  8.   

    你问题不是讲的很清楚,下面可以可以正确求出money和,count同理
    select sum(money ) from(select  distinct b.* from a inner join b on a.id =b.id inner join c on a.id = c.id)
    where id = 1
    有问题再说
      

  9.   

    问题讲的不是很清楚,下面可以正确求成money和,不知是你想要的吗,count同理,有要求再说
    select sum(money ) from(select  distinct b.* from a inner join b on a.id =b.id inner join c on a.id = c.id)
    where id = 1
      

  10.   

    先求和再JOIN或者用报表分析函数进行二次聚合
      

  11.   

    已经解决了,就是连接两次,先连接一个表然后group by 然后用结果集再关联另一个表。
    谢谢各位的指教!