如何从一个表中选择与另一个表中的差异(总和)?

问题描述 投票:0回答:2

我有两个带有以下字段的表:

orders.orderID
orders.orderValue

和:

payments.orderID
payments.payVal

payments.payVal
中,每个订单都会增量付款(多对一)。我需要选择
orders
中还有剩余付款的所有订单
(orders.orderValue - ((sum)payments.payVal) > 0 )

由于特殊原因,我无法使用

orderID
进行 foreach。由于某些原因,我也无法在
orders
表中添加列。我需要在一个查询中执行整个选择,例如:
SELECT * FROM orders WHERE <... each(orderValue - (sum(payVal))) > 0 ...>

sql mysql
2个回答
1
投票
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 小提琴


-1
投票

看起来我们得出了相同的解决方案,

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
© www.soinside.com 2019 - 2024. All rights reserved.