HAVING子句中結合使用GROUP BY子句,你必須使用像SUM聚合函數的HAVING子句,像這樣:
SELECT fee_id
FROM a_fees
WHERE verified = 'N'
GROUP BY fee_id
HAVING SUM(audit_fees + audit_related_fees + tax_fees + other_fees) < 5000;
這個sums autid_fees
,audit_related_fees
,tax_fees
和other_fees
的每一行都具有然後檢查它是否爲< 5000.
但是,如果fee_id是唯一的,這意味着您必須總結的所有字段位於同一行,因此不需要使用GROUP BY子句和查詢可以簡化爲這樣:
SELECT fee_id
FROM a_fees
WHERE
verified = 'N'
AND (audit_fees + audit_related_fees + tax_fees + other_fees) < 5000;
你UPDATE查詢就變成了:
UPDATE a_fees
SET active = 'N'
WHERE a_fees.fee_id IN (
SELECT fee_id
FROM a_fees
WHERE verified = 'N'
AND audit_fees + audit_related_fees + tax_fees + other_fees < 5000);
您說對了:MySQL不允許你更新你使用在選擇相同的表部分,你應該使用JOINS重寫更新查詢。
但如果fee_id是唯一沒有必要使用子查詢和它的更好的使用只是一個更新,無需子查詢:
UPDATE a_fees
SET active = 'N'
WHERE verified = 'N'
AND audit_fees + audit_related_fees + tax_fees + other_fees < 5000;
謝謝:)不過我也在想,如果a_fees.fee_id是獨一無二的,不需要使用子查詢,並且UPDATE查詢可以簡化,就像我上一段代碼片段 – fthiella
謝謝!你搖滾。我認爲括號可能有點不一致,但這一切都很有意義。謝謝!多好的使用stackoverflow的經驗! – Ben
我剛剛執行了這個聲明。像魅力一樣工作。 :) – Ben