2017-01-20 112 views
0

下面的查詢我的SQL和返回雙精度值

SELECT 
invoices.id, 
SUM(payments.amount) 
FROM adass.invoices 
INNER JOIN adass.payments ON invoices.id=payments.id_invoice 
GROUP BY invoices.id ORDER BY 1 desc LIMIT 0, 25 

返回以下結果

enter image description here

然而,當我加入另一個表來查詢,像這樣:

SELECT 
invoices.id, 
SUM(payments.amount) 
FROM adass.invoices 
INNER JOIN adass.invoice_items ON invoices.id=invoice_items.id_invoice 
INNER JOIN adass.payments ON invoices.id=payments.id_invoice 
GROUP BY invoices.id ORDER BY 1 desc LIMIT 0, 25 

它重複發票ID爲13919的付款金額,有效地雙倍荷蘭國際集團支付100表

enter image description here

是什麼原因造成的?

我已經添加下面

發票項目表 enter image description here

付款表的表內容 enter image description here

UPDATE:大的查詢如下

SELECT SQL_CALC_FOUND_ROWS invoices.id, 
COALESCE(SUM(invoice_items.gross),0) AS gross, 
COALESCE(SUM(invoice_items.net) - SUM(invoice_items.gross),0) AS vat, 
COALESCE(SUM(invoice_items.net),0) AS net, 
COALESCE(SUM(payments.amount),0), 
COALESCE(SUM(payments.amount) - SUM(invoice_items.net),0) AS outstanding 
FROM adass.invoices 
LEFT JOIN adass.invoice_items ON invoices.id=invoice_items.id_invoice 
LEFT JOIN adass.payments ON invoices.id=payments.id_invoice 
GROUP BY invoices.id ORDER BY 1 desc LIMIT 0, 25 

結果: enter image description here

回答

0

很顯然,這是怎麼回事。您的發票#13919有兩個發票項目,因此您得到double發票支付金額,因爲您的查詢生成兩行。如果您有三個發票項目,那麼金額將增加三倍。

您需要從查詢中刪除此子句INNER JOIN adass.invoice_items ON invoices.id=invoice_items.id_invoice,因爲您無論如何都不使用來自adass.invoice_items的列。然後

您的查詢將是:

SELECT invoices.id, 
     SUM(payments.amount) 
    FROM adass.invoices 
INNER JOIN adass.payments ON invoices.id=payments.id_invoice 
GROUP BY invoices.id ORDER BY 1 desc LIMIT 0, 25 
+0

它是用於演示目的的簡化查詢。我已經添加了更多的查詢返回 –