Я работаю над запросом, который использует необходимость сравнивать сумму элементов из объединенной таблицы с значением поля из «основной» таблицы. Вот суть моего запроса:MySQL с SUM (column1) <> column2 не работает
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): Неизвестный столбец «t1.total_amount» в «имеет пункт» Излишне говорить, что поле не существует в t1 и вообще не было опечатки (квадра проверила это, на грани безумия здесь).
Я не могу для жизни меня выяснить, что здесь не так. Я пробовал искать SO уже, и большинство проблем возникают из-за людей, использующих HAVING вместо WHERE, но, видя, что я использую SUM(), я думаю, что это правильный путь.
EDIT: ответ Терье был наиболее точным, хотя мне удалось вытащить его без использования этого синтаксиса (возможно, самого глупого обновления предложения всех времен) моего обновление предложение, которое было (глупо, делать не пытайтесь это дома, если все остальное не сработает):
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
Хм, эта идея может быть лучше для моего конечного решения. Спасибо, Терье! Когда я получу его для работы в обновлении, ваш ответ будет выбран. –