以下是表
表 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 多所以你相乘的每个 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