簡體   English   中英

如何從一個表中選擇與另一個表的(和)差?

[英]How to select from one table where difference with (sum) from another table?

我有兩個表,其中包含以下字段:
...

orders.orderID
orders.orderValue

payments.orderID
payments.payVal

payments.payVal ,每個訂單(多對一)將有增量付款。
我需要它,因此從剩余付款的orders中選擇“所有訂單” (orders.orderValue - ((sum)payments.payVal) > 0 )

我現在唯一能想到的就是使用orderID的(foreach),但是由於某些特殊原因,我不能這樣做。 我也不能出於某些原因在表內添加一列來保存值。

我需要的是在單個SQL查詢中執行類似於此想法的整個選擇: SELECT * FROM orders WHERE <... each(orderValue - (sum(payVal))) > 0 ...>

SELECT *, SUM(p.payVal) AS TotalPayed
FROM orders o
LEFT JOIN payments p ON o.orderID = p.orderID
GROUP BY o.orderID
HAVING SUM(p.payVal) < o.orderValue

這應該為您提供必要的字段,盡管我建議您在此查詢中選擇特定的字段。

LEFT JOIN確保即使沒有付款也能收到所有訂單。

SQL小提琴

看起來我們來到了相同的解決方案,

http://sqlfiddle.com/#!2/9a657/18

SELECT * FROM `orders`
LEFT JOIN `payments` AS p ON `orders`.`orderID` = p.`orderID`
GROUP BY `orders`.`orderID`
HAVING SUM(p.`payVal`) <= 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM