2011-03-31 2 views
0

이미 테이블에서 가장 높은 final_id를 선택하고 +1을 추가하여 final_id를 업데이트하는 데 문제가 있습니다. "당신은 FROM 절에서 업데이트 대상 테이블 'customer_orders'를 지정할 수 없습니다"내가 슬프게 이유를 실패 ..mysql update subquery 지정 대상 테이블

UPDATE customer_orders 
    SET final_id = (SELECT final_id FROM customer_orders ORDER BY final_id DESC)+1, 
     status = 2, 
     payment_id = '{$transaction_id}', 
     payment_type = '{$type}', 
     payment_reserved = '{$amount}', 
     payment_currency = '{$cur}', 
     payment_cardnopostfix = '{$postfix}', 
     payment_fraud_suspicious = '{$fraud}' 
    WHERE id = '{$order_id}' 

내가 설정하려고 해요 :

아래 쿼리는 오류를 출력 내 시스템의 최종 주문에 대해 고유 한 ID가 증가합니다.

누군가 내가 잘못하고있는 것을 말해 줄 수 있기를 바랍니다.

안부

답변

1

당신은 당신의 쿼리를 다시 작성하고 가입 사용할 수 있습니다

UPDATE customer_orders 
INNER JOIN (SELECT IFNULL(MAX(final_id),0) as max_id FROM customer_orders)a ON(1=1) 
SET final_id = a.max_id+1, status = 2, payment_id = '{$transaction_id}', 
payment_type = '{$type}', payment_reserved = '{$amount}', 
payment_currency = '{$cur}', payment_cardnopostfix = '{$postfix}', 
payment_fraud_suspicious = '{$fraud}' 
WHERE id = '{$order_id}' 
0

변화 SELECT max(final_id) FROM customer_orders

0

에 내부 쿼리는 다음을 시도해보십시오

UPDATE customer_orders   
    SET final_id = MT.MaxId + 1   -- use the computed max id, and increment 
     , status = 2 
     , payment_id = '{$transaction_id}' 
     , payment_type = '{$type}' 
     , payment_reserved = '{$amount}' 
     , payment_currency = '{$cur}' 
     , payment_cardnopostfix = '{$postfix}' 
     , payment_fraud_suspicious = '{$fraud}' 
    FROM customer_orders 
     -- include a subquery to determine the max id from the customer_orders table 
     -- and assign 'MT' as the name of the results table 
     , (SELECT MAX(final_id) as MaxId FROM customer_orders) MT 
    WHERE id = '{$order_id}'