具有SUM(column1)<>的MySQL column2不起作用

时间:2013-03-09 14:38:22

标签: mysql group-by sum aggregate-functions having

我正在处理一个查询,该查询使用必须将联接表中的元素总和与" 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(),我认为这是正确的方法。


编辑: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
;

P.S。 :这里的最终目标是在更新句子中使用相同的条件 提前谢谢, -Lauri

2 个答案:

答案 0 :(得分:2)

为了与t1.total_amount进行比较,您必须将其添加到GROUP BY子句中,或者与min(total_amount)进行比较。 t1.id。当您按{{1}}进行分组时,您使用的total_amount的聚合函数无关紧要。

答案 1 :(得分:-1)

HAVINGGROUP BY条款不同,

WHEREORDER BY仅适用于您实际选择的内容。所以你需要选择total_amount,我很害怕。 此外,语法是&#39;!=&#39;对于MySQL中的不平等。(我更正了,&#39;&lt;&gt;&#39;在MySQL中没问题。)

WHEREORDER BY视为您对所选表格的操纵,并将HAVINGGROUP BY视为操纵您现有的数据。