我正在处理一个查询,该查询必须将连接表中的元素总和与“主”表中的字段值进行比较。这是我的查询的要点:
SELECT t1.id
FROM table1 AS t1
INNER JOIN table2 t2 ON t2.t1_id = t1.id -- AND OTHER CONDITIONS
-- WHERE more t1 conditions
GROUP BY t1.id
HAVING SUM(t2.amount) <> t1.total_amount
AND SUM(t2.amount) = (t1.component1+t1.component2+t1.component3+t1.component4);
它输出: ERROR 1054 (42S22): Unknown column 't1.total_amount' in 'having Clause' 不用说,该字段存在于 t1 中并且没有拼写错误(quadra-checked this,这里濒临疯狂)。
我一生都无法弄清楚这里出了什么问题。我已经尝试过搜索 SO 并且大多数问题是由于人们使用 HAVING 而不是 WHERE,但是看到我正在使用 SUM(),我认为这是正确的方法。
编辑:Terje 的回答是最准确的,尽管我确实设法在没有使用该语法的情况下完成了它(可能是有史以来最愚蠢的更新句子)我的更新句子,这是(愚蠢的,除非一切都不要在家里尝试这个否则失败):
UPDATE t1
SET t1.total_amount =
(
SELECT SUM(t2.amount)
FROM table 2
--WHERE, AND
GROUP BY t1.id
HAVING SUM(t2.amount) <> t1.total_amount
AND SUM(t2.amount) = (t1.component1+t1.component2+t1.component3+t1.component4)
)
WHERE t1.id IN (same awful subquery as before, except selecting t2.t1_id)
--AND other conditions
;
PS:这里的最终目标是在更新句子中使用相同的条件提前致谢,-Lauri