2014-10-19 78 views
-1

2个表中选择I组有3代MySQL表为这样的:http://pastebin.com/1eH6R3f9通过总基于另一个表

我tryed此查询,但它的myltiplies大写金额超过一次。有人请帮忙!

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 
+0

请编辑问题并使其可读。 – OfirH 2014-10-19 11:08:12

回答

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在必要时使用反引号来转义名称。但是,最好使用不需要转义的名称。
+0

非常感谢.... – 2014-10-20 00:37:50