根据另一个表总共选择2个表

时间:2014-10-19 11:06:16

标签: php mysql

我有3个mysql表,如下所示:http://pastebin.com/1eH6R3f9

我尝试了这个查询,但它多次myltiplies amout。有人请帮忙!

SELECT
 m.merchantID,m.merchantName,SUM(pr.dr_amount) 'Total Due', SUM(me.paidAmount) 'Total Paid' 

FROM merchant m 

INNER JOIN product_report pr, merchant_payment me 

WHERE m.merchantID = pr.merchantID AND m.merchantID = me.merchantID 

GROUP BY m.merchantID

1 个答案:

答案 0 :(得分:0)

您需要在进行连接之前沿每个维聚合数据。否则,您将获得笛卡尔积:

SELECT m.merchantID, m.merchantName, pr.TotalDue, me.TotalPaid
FROM merchant m LEFT JOIN
     (select pr.merchantId, sum(pr.dr_amount) as TotalDue
      from product_report pr
      group by pr.merchantId
     ) pr
     ON m.merchantId = pr.merchantId LEFT JOIN
     (select me.merchantId, sum(me.paidAmount) as TotalPaid
      from merchant_payment me 
      group by me.merchantId
     ) me
     ON m.merchantId = me.merchantId;

另外:

  • 不要混合隐式和显式联接。一个简单的规则:永远不要在from子句中使用逗号。
  • 仅对字符串和日期常量使用单引号。 MySQL在必要时使用反引号来转义名称。但是,最好使用不需要转义的名称。