我正在处理一个查询,该查询使用必须将联接表中的元素总和与" main"中的字段值进行比较。表。 这是我的疑问的要点:
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):未知栏&#39; t1.total_amount&#39;在&#39;有条款&#39; 毋庸置疑,该领域存在于t1,并且没有拼写错误(四次检查这一点,在此处处于疯狂的边缘)。
我不能为我的生活弄清楚这里有什么不对。我已经尝试过搜索SO了,大多数问题是由于人们使用HAVING而不是WHERE,但看到我使用SUM(),我认为这是正确的方法。
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
;
P.S。 :这里的最终目标是在更新句子中使用相同的条件 提前谢谢, -Lauri
答案 0 :(得分:2)
为了与t1.total_amount
进行比较,您必须将其添加到GROUP BY
子句中,或者与min(total_amount)
进行比较。 t1.id
。当您按{{1}}进行分组时,您使用的total_amount的聚合函数无关紧要。
答案 1 :(得分:-1)
HAVING
和GROUP BY
条款不同, WHERE
和ORDER BY
仅适用于您实际选择的内容。所以你需要选择total_amount
,我很害怕。 此外,语法是&#39;!=&#39;对于MySQL中的不平等。(我更正了,&#39;&lt;&gt;&#39;在MySQL中没问题。)
将WHERE
和ORDER BY
视为您对所选表格的操纵,并将HAVING
和GROUP BY
视为操纵您现有的数据。