【发布时间】:2015-02-15 18:32:39
【问题描述】:
我试图有 2 个 LEFT JOINS,对结果求和,然后从另一个中减去一个总和。一个是正确求和,但是当我放置两个连接时,其中一个没有正确求和。
SELECT
j.jobNumber, j.customerID, j.costDelivery, j.costCallout, j.costLabour ,
c.customerID, c.firstName, c.lastName ,
IFNULL(sum(jp.amount),0) AS Total_Paid ,
IFNULL(j.costDelivery,0) + IFNULL(j.costCallout,0) + IFNULL(j.costLabour,0) + IFNULL(sum(p.unitPrice*p.quantity),0) AS Total_Cost
FROM s_jobcards AS j
INNER JOIN s_customers AS c ON j.customerID = c.customerID
LEFT OUTER JOIN s_payments AS jp ON j.jobNumber = jp.jobNumber
LEFT OUTER JOIN s_partOrders AS p ON j.jobNumber = p.jobNumber
GROUP BY j.jobNumber
HAVING Total_Cost > Total_Paid
Total_Paid 列说明jp.amount 的总和不正确。但是,Total_Cost 总和正确。有什么想法吗?
【问题讨论】:
-
这是一个无效的 SQL 语句。 (MySQL 做了一些不可预知的技巧...)一般的 GROUP BY 规则是:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数!
-
...在核心表的pk上分组时例外。
-
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
-
@Strawberry,真的!但是,我的建议仍然是遵循一般规则 - 这样你就不会搞砸了。
标签: mysql sql select join left-join