当我尝试更新a_fees表时,为什么会出现以下错误?根据我可以收集的内容,您不能将子选择标准建立在正在更新的表上?是因为SQL是向后读的吗?我怎么能绕过这个?
错误消息:1093 - 您无法在FROM子句中为更新指定目标表'a_fees'
UPDATE a_fees
SET active = 'N'
WHERE a_fees.fee_id IN
(
SELECT fee_id
FROM a_fees
WHERE verified = 'N'
HAVING audit_fees + audit_related_fees + tax_fees + other_fees < 5000);
答案 0 :(得分:0)
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;
此sums autid_fees
,audit_related_fees
,tax_fees
和other_fees
对于具有相同fee_id的每一行,然后检查它是否&lt; 1&lt; 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不允许你更新你在select部分中使用的同一个表,你应该只使用JOINS重写更新查询。
但是如果fee_id是唯一的,那么就不需要使用子查询,只使用没有子查询的UPDATE会更好:
UPDATE a_fees
SET active = 'N'
WHERE verified = 'N'
AND audit_fees + audit_related_fees + tax_fees + other_fees < 5000;