[MySQL] SELECT SUM() in UPDATE

Hab mal eine kurze Frage.
Das hier funktioniert bei mir einwandfrei:

Code:
UPDATE `up_topics`
		SET `stat_posts`=(SELECT COUNT(*) FROM `up_posts` WHERE `sub`=`up_topics`.`id`)
		WHERE id=0

Wieso gibt es hier aber
Code:
UPDATE `up_forums`
SET `stat_posts`=(SELECT SUM(`stat_posts`) FROM `up_forums` WHERE `sub`=`up_forums`.`id`)
WHERE `id`=0
#1093 - You can't specify target table 'up_forums' for update in FROM clause
bzw. wie bekomme ich das Update so wie erwünscht hin?
 
Und die Dokumentation gibt wiedermal die Antwort...

http://dev.mysql.com/doc/refman/5.1/de/subquery-restrictions.html
Im Allgemeinen können Sie eine Tabelle nicht in einer Unterabfrage modifizieren und zugleich mit einem Select abfragen. Diese Beschränkung gilt beispielsweise für Anweisungen der folgenden Form:

? DELETE FROM t WHERE ... (SELECT ... FROM t ...);
? UPDATE t ... WHERE col = (SELECT ... FROM t ...);
? {INSERT|REPLACE} INTO t (SELECT ... FROM t ...);

Den Rest der Doku kannst du dir selbst anschauen, lesen wirst du hoffentlich können.
 
Original von fetzer
lesen wirst du hoffentlich können.
Das nehme ich als Beleidigung.
Würde jeder erst tausend mal recharchieren, wüsste zu allem
passende Suchbegriffe etc. bräuchte man keine Communities mehr!
Wie hätte ich auf den resource locator kommen sollen?

Habo ist nicht mehr das, was es mal war...

Trotzdem danke für den Link.
 
Original von Friedrich
Original von fetzer
lesen wirst du hoffentlich können.
Das nehme ich als Beleidigung.
Habo ist nicht mehr, was es mal war...

Trotzdem danke für den Link.

Hi!

Man kann auch echt übertreiben.
Das Habo nicht mehr so ist, liegt an der Kiddie-Überflutung.
Man muss sich erst von Kiddie zu Würdigen hocharbeiten.

Zu deiner "Beleidigung": Viele (Kiddies) lesen nicht, und googlen erst recht nicht


MfG
 
"Zu deiner "Beleidigung": Viele (Kiddies) lesen nicht, und googlen erst recht nicht"
Dann sind kiddies der Grundbaustein für Communities bzw der Teil
an jemandem, der kiddy ist. Apropo kiddy.
leetspeak, scriptkiddy, kiddy - Diese Begriffe alleine schon zu verwenden
ist für mich "kiddy". Was hat deine Aussage denn hier mit mir zutun.
Ich sage nur nebenbei, wie ich was aus meiner Sicht sehe und debattiere
hier nicht subordinierten Mitläuferscheiß.
 
Vielleicht meinte ich aber genau das, was du gerade ansprichst. Es ist wirklich nicht zu viel verlangt, sich mal eine Dokumentation durchzulesen oder hierbei nach "Subquerys" oder Definitionen/Syntaxen von SELECT und UPDATE-Statements zu suchen. Es darauf zu schieben, dass einem nicht die passenden Suchbegriffe eingefallen sind halte ich für pure Faulheit, etwas (logisch) Nachdenken bringt einen meistens auf die richtige Spur, die man eben auch verfolgen muss.

Habo ist nicht mehr das, was es mal war...
"Achja, früher war alles besser... Früher wurde einem die Google- und Dokudurchsucherei einfach von anderen selbstverständlich abgenommen. Aber heute maulen alle nur darüber, wenn man selbst mal nicht auf die Idee kommt, einen Blick in die Doku zu werfen oder wenn einem die richtigen Suchwörter nicht einfallen. Ausserdem ist die ja so groß, da findet man doch garnichts..."
Solche Dinge hört man so oft, selbst im Habo ist anscheinend diese Meinung jetzt bald bei jedem zweiten User zu finden. Tut mir leid, wenn ich dich vorschnell verurteilt habe, aber es ist nunmal nicht besonders schwer eine Dokumentation ( Ich spreche nicht von Suchmaschinen, die mit 5.000.000 Ergebnissen kommen ) nach Begriffen, die du sicherlich schon einmal gelesen oder gehört hast, zu durchsuchen und die Artikel lesen, auch wenn sie nicht sofort all deine Fragen beantworten.

Dann sind kiddies der Grundbaustein für Communities bzw der Teil
an jemandem, der kiddy ist.
Warum soll man nicht auf hohem Niveau diskutieren können? Warum kann man sich bei Fragen nicht selbst mal anstrengen, sondern fragt einfach mal? "Vielleicht weiss es ja einer, dann wär die Sucherei ja eh umsonst." Wenn du gefragt hättest, warum das mit den Statements so ist, dann wäre das um einiges schwieriger gewesen und hier wäre eine solche Frage durchaus sinnvoll gewesen, denn die Antwort bekommt man nicht einfach so durch die normale Dokumentation oder über Google. Nur leider interessiert das hier keinen, es geht nur noch ums suchen und ums finden, nicht mehr ums wissen oder ums erfahren. Und das hat wahrlich nichts mit Niveau zu tun.

Bitte nimms nicht übel, du bist halt der, den es jetzt erwischt hat ;) Aber man kann es sich ja mal zu Herzen nehmen und das nächste mal einfach überlegen, was man sonst noch ausser Google nach welchen Begriffen durchsuchen könnte.
 
Also, Jungs: Das Ursprungs-Problem von Friedrich war mitnichten trivial.
Und es war mitnichten als Erwartungswert aus der Dokumentation zu ziehen.

Daher kann ich Friedrich gut verstehen, wenn er sich beleidigt fühlt.
Kühlt doch mal etwas ab und kommt auf das fachliche Problem zurück!
Das ist interessanter als das Rumreiten auf Vorwürfen.

----

Es ist überhaupt nicht unlogisch, zu erwarten, daß die Unterabfrage ausführbar ist.
Das ist sie nämlich erstmal von der reinen Anwendbareit der Ausdrucksmittel her.
Und die Bemerkung, auf die fetzer verweist, steht nicht umsonst im Sonderteil "Feature-Beschränkungen" (der für normale Nutzung eigentlich nicht notwendig sein sollte).

Etwas anderes ist, WIE sie genau im Kontext des Gesamtausdrucks ausgeführt werden könnte und was dann an eventuell unterschiedlichen Ergebnissen zu erwarten wäre.

WENN man davon ausgeht, daß die Unterabfrage EINMALIG VOR dem Update ausgeführt wird, stellt die Summe eine Konstante im Update dar.

Dieser Fall läßt sich aber besser als bei Friedrichs Eingangsbeispiel (besser lesbar und verstehbar und vor allem unabhängig von eventuellen SQL-Maschinen-Eigenwilligkeiten und -Weiterentwicklungen) dadurch realisieren, daß die Formulierung des ganzen auf den Inhalt angepaßt wird. Soll heißen: EXTRA Abfrage VOR dem Update.

WENN man dagegen davon ausgeht, daß die Unterabfrage für jedes Update-Element erneut aktuell bestimmt werden soll, wäre ihr Inhalt eventuell eine Variable, die von allen soweit durchgeführten Updates abhängig ist.

Ich vermute aber, daß es bei Friedrich um erstere Interpretationsvariante geht.
 
Zurück
Oben