1

以下はテーブルです

表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。私のコードのどこが間違っているのか教えてください.誰かが私を助けてくれれば感謝します.

4

1 に答える 1

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
于 2013-07-20T00:26:30.633 に答える