2014-01-08 2 views
0

여기에서 검색을 시도했지만 운이 없습니다. 동일한 문제는없는 것으로 보입니다. 하위 쿼리, 오류 1093을 사용하는 MySQL 업데이트

나는이 선택이 있습니다

SELECT a.whse, a.sku, a.data, a.dt_exp FROM volume_hist_fin a 
WHERE a.data = (
    SELECT MAX(b.data) 
    FROM volume_hist_fin b 
    WHERE b.md5_skuwhse = a.md5_skuwhse 
) 
GROUP BY whse, sku, a.data 

의미가 있습니다. 지금 업데이트를하려고합니다. 이 업데이트 :

UPDATE volume_hist_fin a SET a.dt_exp = '2013-10-09' 
WHERE a.data = (
    SELECT MAX(b.data) 
    FROM volume_hist_fin b 
    WHERE b.md5_skuwhse = a.md5_skuwhse 
) 

하지만 오류를 받고 있어요 :

1093 "You can't specify target table 'a' for update in FROM clause"

는 하위 쿼리는 동일한 ID 코드를 사용하여 최대의 데이터를 얻을 필요가있어 모든 문제 (md5_skuwhse)

이 업데이트를 어떻게 작동시킬 수 있습니까?

+0

와 함께 할 수 있습니다 -> SET의 dt_exp = '2013년 10월 9일' 데이터 = ( SELECT MAX (b.data) FROM volume_hist_fin UPDATE volume_hist_fin b WHERE b.md5_skuwhse = md5_skuwhse ) – Gayathri

+0

감사합니다. @Gayathri. 당신이 대답하려고하지 않았어, 나는 peterm에서 대답을 사용. 감사합니다 :) – saulob

답변

2

당신은 당신이 시도 할 수 JOIN

UPDATE volume_hist_fin a JOIN 
(
    SELECT md5_skuwhse, MAX(data) max_data 
    FROM volume_hist_fin 
    GROUP BY md5_skuwhse 
) b 
    ON a.md5_skuwhse = b.md5_skuwhse 
    AND a.data = b.max_data 
    SET a.dt_exp = '2013-10-09' 
+0

감사. 잘 했어. 첫 번째 하나가 나에게 오류를 주었다. "알 수없는 열 'a.md5_skuwhse'in where 절 '두 번째는 별칭에'b '가 누락되어 편집 한 것입니다. 감사합니다. 감사합니다.) 감사합니다. – saulob

+0

'JOIN'이있는 버전에서 하위 쿼리의 테이블 별칭'b'는 필요 없습니다. 그러나 부질의 자체는'b'의 별명을 가지고 있습니다. – peterm

+0

가 별칭없이 작동하지 않는다면 "필드 목록 '의"알 수없는 열'b.data ' "라는 메시지가 표시되어 그 안에 별칭을 추가 한 것입니다. 함께 일했다 – saulob