2012-04-13 88 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:男性,我很抱歉,這只是我的missprint,查詢必須是這樣的:

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) 

,他們都工作正常的我。 感謝您的回答,需要更多咖啡

+5

我很驚訝,第一個是工作。 – 2012-04-13 08:02:21

+0

好吧......讀完你的評論後,我也很驚訝。 好吧,我不想玩命運,並重寫這兩個查詢(即使第一次作品) – Dmitry 2012-04-13 08:06:20

+0

最好的方法是加入,儘管作爲Devart的答案。 – 2012-04-13 08:08:55

回答

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;