[英]displaying all records from one table and matching records from another
[英]Gather all records from one table and SUM a field from another table
我正在嘗試獲取客戶的所有invoices
,然后從payments
計算總和。 問題是,所有返回的行中, paid_to_date
的SUM值都是相同的。
SELECT `invoices`.*,
DATE_FORMAT(`invoices`.`due_date`, '%M %d, %Y') AS `due_date`,
totals.`paid_to_date`
FROM `invoices`,
(SELECT `payments`.`invoice_id`,
SUM(`payments`.`amount`) `paid_to_date`
FROM `payments`
GROUP BY `payments`.`invoice_id`) AS totals
WHERE `invoices`.`client_id` = 1
ORDER BY `invoices`.`due_date` DESC
您需要執行JOIN
而不是在FROM
語句中調用兩個表。
SELECT `invoices`.*,
DATE_FORMAT(`invoices`.`due_date`, '%M %d, %Y') AS `due_date`,
totals.`paid_to_date`
FROM `invoices`
LEFT JOIN (SELECT `payments`.`invoice_id`,
SUM(`payments`.`amount`) `paid_to_date`
FROM `payments`
GROUP BY `payments`.`invoice_id`) AS totals
ON `invoices`.`ID` = `totals`.`invoice_id`
WHERE `invoices`.`client_id` = 1
ORDER BY `invoices`.`due_date` DESC
編輯:更改為LEFT JOIN
因為我不知道您想查看未付款的發票
包括SQL Fiddle以證明查詢功能符合預期。 http://sqlfiddle.com/#!9/50f08e/2
如評論中所述,您可能具有錯誤的主鍵和外鍵。 在您的SQL Fiddle中,我更改了您的付款發票ID,因為它們將用於不存在的發票。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.