2012-04-13 6 views
0

난 2 개 쿼리가 :이상한 MySQL의 오류

UPDATE dws_photogallery_albums a 
SET a.photoscount=(
    SELECT COUNT(*) FROM dws_photogallery_photos p 
    WHERE p.albumid=a.albumid) 

UPDATE dws_photoportfolio_photos a 
SET a.photoscount=(
    SELECT COUNT(*) FROM dws_photoportfolio_photos p 
    WHERE p.albumid=a.albumid) 

첫 작품 확인을하지만, 둘째 날 오류가 있습니다 : (이름 만 다릅니다)

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

테이블이 동일합니다. 무엇이 될 수 있습니까?

UPD :

UPDATE dws_photogallery_albums a 
    SET a.photoscount=(
     SELECT COUNT(*) FROM dws_photogallery_photos p 
     WHERE p.albumid=a.albumid) 

    UPDATE dws_photoportfolio_albums a 
    SET a.photoscount=(
     SELECT COUNT(*) FROM dws_photoportfolio_photos p 
     WHERE p.albumid=a.albumid) 

을 그리고 그들은 모두 나를 위해 확인 일 : 남자, 정말 미안 해요, 그냥 내 missprint의 쿼리 그렇게해야합니다. 답변 해 주셔서 감사합니다. 더 많은 커피가 필요합니다.

+5

나는 첫 번째가 작동하는지 놀랍군요. –

+0

음 ... 당신의 의견을 읽은 후에 나는 놀랐습니다. 좋아요, 나는 운명을 가지고 놀고 양쪽 쿼리를 다시 쓰고 싶습니다. (처음 작동하더라도) – Dmitry

+0

가장 좋은 방법은 Devart의 답으로 JOIN하는 것입니다. –

답변

2

그것은 당신이 당신이에서 읽고있는 테이블을 업데이트 할 수 있음을 의미한다. 별칭으로 문제가 해결되지는 않습니다. 불일치가 생길 수 있습니다. 임시 테이블을 사용하거나 변수를 사용하여 작업해야합니다.

2

중첩 된 선택에서 사용하는 것과 동일한 테이블을 업데이트하고 있습니다.

이 작업을 수행 할 수 없습니다

update table X 
where ... (Select ... from X) 
2

이상하지 않습니다. FROM 절에서 업데이트 할 대상 테이블을 지정할 수 없습니다. 당신이

2

는이 쿼리 업데이트에 대한 동일한 테이블을 갖는 두 번째 쿼리에서 선택되는

공지 사항 -

UPDATE 
    dws_photoportfolio_photos a 
    JOIN (
    SELECT albumid, COUNT(*) cnt FROM dws_photoportfolio_photos GROUP BY albumid 
) p 
    ON p.albumid = a.albumid 
SET a.photoscount = p.cnt;