HAVING 子句与 GROUP BY 子句结合使用,您必须在 HAVING 子句上使用 SUM 之类的聚合函数,如下所示:
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;
this sums autid_fees
, audit_related_fees
,tax_fees
和other_fees
具有相同 fee_id 的每一行,然后检查它是否 < 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:
UPDATE a_fees
SET active = 'N'
WHERE verified = 'N'
AND audit_fees + audit_related_fees + tax_fees + other_fees < 5000;