奇怪的mysql错误

时间:2012-04-13 07:59:22

标签: mysql

我有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 个答案:

答案 0 :(得分:2)

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

你不能这样做:

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

这并不奇怪您无法在FROM子句中指定更新目标表。

请注意,您拥有相同的表进行更新,并在第二个查询中选择

答案 3 :(得分: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;