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

时间:2013-08-18 10:20:40

标签: php mysql select

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

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 ...>

2 个答案:

答案 0 :(得分: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 Fiddle

答案 1 :(得分:-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
相关问题