2012-10-31 3 views
0

왜 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

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_feesother_fees를 가지 동일한 fee_id를 확인한 다음 <인지 확인하십시오.

fee_id가 고유하면 합계가있는 모든 필드가 같은 행에 있음을 의미하므로 GROUP BY 절 및 쿼리를 사용할 필요가 없습니다 이 간단하게 할 수있다 :

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); 

그리고 당신 말이 맞아 :

SELECT fee_id 
FROM a_fees 
WHERE 
    verified = 'N' 
    AND (audit_fees + audit_related_fees + tax_fees + other_fees) < 5000; 

당신의 UPDATE 질의는된다 MySQL은 당신이 선택에 사용하고있는 동일한 테이블을 업데이트 할 수 없습니다 part이며 JOINS 만 사용하여 업데이트 쿼리를 다시 작성해야합니다.

그러나 fee_id가 고유 한 경우이 하위 쿼리를 사용할 필요가 없습니다 그것은 부질없이 단지 UPDATE를 사용하는 것이 좋습니다 :

UPDATE a_fees 
SET active = 'N' 
WHERE verified = 'N' 
    AND audit_fees + audit_related_fees + tax_fees + other_fees < 5000; 
+0

감사합니다 :)하지만 a_fees.fee_id가 고유 한 경우 나 또한 그 생각했다 , 하위 쿼리를 사용할 필요가 없으며 UPDATE 쿼리를 마지막 코드 조각처럼 단순화 할 수 있습니다 – fthiella

+0

고마워요! 너 락이야. 나는 괄호가 조금 일관성이 없을지도 모른다라고 생각한다. 그러나 이것 모두는 큰 의미를 가진다. 고맙습니다! stackoverflow를 사용하면 얼마나 훌륭한 경험이 될까요! – Ben

+0

방금 ​​성명을 실행했습니다. 매력처럼 일했습니다. :) – Ben

관련 문제