0

我有 2 个查询:

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)

他们都适合我。谢谢解答,需要更多咖啡

4

4 回答 4

2

您正在更新您在嵌套选择中使用的同一个表。

你不能这样做:

update table X
where  ... ( Select ... from X )
于 2012-04-13T08:02:28.070 回答
2

这意味着,您无法更新正在读取的表。别名不能解决问题。它可能导致不一致。您必须使用临时表或在您的情况下使用变量。

于 2012-04-13T08:03:10.560 回答
2

这并不奇怪您不能在 FROM 子句中指定要更新的目标表。

请注意,您在第二个查询中使用相同的表进行更新和选择

于 2012-04-13T08:03:17.007 回答
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;
于 2012-04-13T08:04:38.553 回答