結合されたテーブルの要素の合計を「メイン」テーブルのフィールドの値と比較する必要があるクエリに取り組んでいます。私のクエリの要点は次のとおりです。
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 に存在し、タイプミスはありませんでした (クアドラでこれを確認しましたが、ここでは狂気の瀬戸際です)。
私は一生、ここで何が悪いのか理解できません。私はすでにSOを検索しようとしましたが、問題のほとんどはWHEREの代わりにHAVINGを使用しているためですが、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