0

我有两个包含以下字段的表:
...

orders.orderID
orders.orderValue

payments.orderID
payments.payVal

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

我现在唯一能想到的是(foreach)使用orderID,但由于某些特殊原因我不能这样做。由于某些原因,我也无法在表中添加一列来保存该值。

我需要的是在一个类似于这个想法的 SQL Query 中执行整个选择:SELECT * FROM orders WHERE <... each(orderValue - (sum(payVal))) > 0 ...>

4

2 回答 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小提琴

于 2013-08-18T10:30:37.620 回答
-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
于 2013-08-18T10:46:46.480 回答