得到SUM我有以下MySQL數據庫結構:SQL查詢,以便從更依賴表
表sales_order的 - ID,姓名,...
id | name
------------------
1 | Order Test
表sales_order_item - ID,ORDER_ID,名稱, amount_dispatched ...
id | order_id | name | amount_dispatched
------------------------------------------
1 | 1 | Item 1 | 5
2 | 1 | Item 2 | 10
表sales_order_item_invoice - ID,ITEM_ID,金額,...
id | item_id | amount
---------------------
1 | 1 | 3
2 | 2 | 5
3 | 2 | 5
這三個表通過外鍵鏈接在一起。表「發票」可以在「項目」中有一行更多的行。表「項目」可以按「順序」在一行中有更多行。
現在,我需要創建一個從表sales_order的返回所有行並追加其它表中有一些數據的SQL查詢 - amount_dispatched和amount_invoiced:
派出=所有訂單的項目的總和amount_dispatched 發票= SUM所有發票金額(或0,如果沒有發票存在)的
這樣的查詢似乎是直截了當:
SELECT
`sales_order`.*,
SUM(`sales_order_item`.`amount_dispatched`) AS dispatched,
SUM(`sales_order_item_invoice`.`amount`) AS invoiced,
FROM `sales_order`
LEFT JOIN `sales_order_item` ON `sales_order`.`id` = `sales_order_item`.`order_id`
LEFT JOIN `sales_order_item_invoice` ON `sales_order_item`.`id` =`sales_order_item_invoice`.`item_id`
GROUP BY `sales_order`.`id`
結果包含所有的訂單 - 確定 結果包含的發票金額總和 - 確定 的結果「amount_dispatched」是無效的 - 如果該項目在item_invoice有更多的行,該項目的金額相加幾次,所以上面的例子中,我得到:
id | name | dispatched | invoiced
---------------------------------------
1 | Order Test | 25 | 13
Amount_dispatched是25,但我希望它是15.
任何想法如何糾正我的SQL查詢? 謝謝。
謝謝。有用。只是一個額外的問題 - 是否有可能沒有子查詢呢?我需要通過Nette NDB構建它,並且它不支持JOIN中的子查詢:( – bigmuscle
@bigmuscle沒有子查詢,我認爲你應該在你的邏輯層中做到這一點。 – Blank