2013-04-16 1 views
0

에서 대상 테이블 'ps_order_history'을 (를) 지정할 수 없습니다. 검색 중이지만 여전히 잘못된 이유를 이해하지 못합니다. 나는 서브 쿼리를 검사했고, 그들은 단지 1 행만 반환했습니다.오류 1093. FROM 절

UPDATE ps_order_history 

SET id_order_state = 18 

WHERE id_order = 
(
    SELECT max(p.id_order) 
    FROM ps_orders p 
    INNER JOIN ps_order_detail d ON d.id_order = p.id_order 
    INNER JOIN ps_order_history oh ON oh.id_order = p.id_order 
    WHERE d.product_name = "Academia Mastermaq" 

    AND p.id_customer = 
    (
     SELECT id_customer 
     FROM ps_customer 
     WHERE firstname = "Cristiano" 
     AND lastname = "Ferreira dos Santos" 
     LIMIT 1 
    ) 
) 

Error Code: 1093. You can't specify target table 'ps_order_history' 
for update in FROM clause 

감사합니다.

+1

선택할 테이블을 업데이트 할 수 없습니다. 예 : 당신의 업데이트는'ps_order_history'에서 작동하고,'ps_order_history'에서 WHERE subselect의 조인 된 필드 중 하나를 선택하고 있습니다. –

+0

나는 본다. 고마워, 나는 그 문제를 해결했다. –

답변

0

이제 하위 쿼리에서 업데이트 테이블에 가입 할 수 없다는 것을 알고 있습니다. Marc B에 감사드립니다!

UPDATE ps_order_history h 
INNER JOIN ps_order_detail d ON d.id_order = h.id_order 

SET h.id_order_state = 15 

WHERE d.product_name = "Academia Mastermaq" 
AND h.id_order = 
(
    SELECT max(p.id_order) 
    FROM ps_orders p 
    /*INNER JOIN ps_order_detail d ON d.id_order = p.id_order 
    INNER JOIN ps_order_history oh ON oh.id_order = p.id_order*/ 


    WHERE p.id_customer = 
    (
     SELECT id_customer 
     FROM ps_customer 
     WHERE firstname = "Cristiano" 
     AND lastname = "Ferreira dos Santos" 
     LIMIT 1 
    ) 
)