2012-04-13 85 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;