2012-04-13 7 views
0

ich habe 2 Anfragen:seltsam mysql Fehler

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) 

ersten Werke in Ordnung, aber gibt mir zweiten Fehler:

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

Tabellen identisch sind (unterscheidet sich nur durch seinen Namen). was kann es sein?

UPD: Männer, ich bin so traurig, es ist nur meine missprint, müssen Abfragen aussehen:

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) 

Und beide funktioniert für mich ok. Vielen Dank für die Antworten, brauchen Sie mehr Kaffee

+5

Ich bin überrascht, dass das erste man arbeitet. –

+0

gut ... nach dem Lesen Ihrer Kommentare bin ich auch überrascht. ok, ich möchte mit dem Schicksal spielen und beide Abfragen umschreiben (auch wenn es zuerst funktioniert) – Dmitry

+0

Der beste Weg ist jedoch mit einem JOIN, wie Devarts Antwort. –

Antwort

2

Es bedeutet, dass Sie die Tabelle nicht aktualisieren können Sie aus lesen. Aliase werden das Problem nicht lösen. Dies könnte zu Inkonsistenzen führen. Sie müssen mit temporären Tabellen oder in Ihrem Fall mit Variablen arbeiten.

2

Sie aktualisieren die gleiche Tabelle, die Sie in geschachtelten auswählen verwenden.

Sie können dies nicht tun:

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

Es ist nicht seltsam Sie können keine Zieltabelle für die Aktualisierung in FROM-Klausel angeben.

Beachten Sie, dass Sie die gleiche Tabelle für die Aktualisierung mit und wählen Sie in der zweiten Abfrage

2

Diese Abfrage -

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;