[mysql]双左联接查询中使用返回不同的值

标签: MySQL
发布时间: 2015/6/11 21:58:39
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

以下是表

表 1

CREATE TABLE table1 (
id smallint(5) NOT NULL AUTO_INCREMENT primary key,
name varchar(30) NOT NULL
 )
ENGINE=InnoDB;

表 2

create table table2(
no int auto_increment primary key,
Reg_no  varchar(2),
debit decimal(19,2)
)
engine=innodb;

表 3

 create table table3(
 no int auto_increment primary key,
 Reg_no  varchar(2),
 Paid decimal(19,2)
)
engine=innodb;

请下面是我的查询代码。

SELECT id, sum(Paid) AS AMOUNT,sum(debit) AS DEBIT 
from table1 LEFT JOIN table2 ON table1.id=table2.Reg_no
LEFT JOIN table3 ON table1.id=table3.Reg_no 
GROUP BY table1.id

请我发现它很难在使用双左的联接查询中,此代码中存在的问题是,例如上面给比预期的数字,更多查询中使用的总和 sum(10+10) 将输出 40 而不是 20 。请我哪儿错了与我的代码。谁能帮我注意此信为荷。在此先感谢

解决方法 1:

问题是每个联接是 1 多所以你相乘的每个 id 的行数。

解决办法是预聚合的结果。 但是,您不提供足够的信息,所提问题给一个正确的答案。 该查询可能看起来类似:

SELECT id, Paid, Debit
from table1 LEFT JOIN
     (select Reg_no, sum(Debit) as Debit
      from table2
      group by Reg_no
     ) table2
     ON table1.id = table2.Reg_no left outer join
     (select Reg_no, sum(Paid) as Paid
      from table3
      group by Reg_no
     ) table3
     ON table1.id = table3.Reg_no 
order BY table1.id
赞助商