nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

UPDATE mit rekursivem SELECT

Von: Michael Schuerig (michael@schuerig.de) [Profil]
Datum: 25.07.2009 20:02
Message-ID: <h4fhbh$doc$1@newsreader2.netcologne.de>
Followup-to: de.comp.datenbanken.misc
Newsgroup: de.comp.datenbanken.misc
CREATE TABLE numbers (
id         serial PRIMARY KEY,
value      real NOT NULL,
parent_id  int REFERENCES numbers(id)
);

UPDATE numbers AS n SET value
(SELECT AVG(children.value)
FROM numbers AS children WHERE children.parent_id = n.id);

Bei diesem UPDATE-Statement spielt die Reihenfolge der Auswertung eine
Rolle. Wenn die neuen Werte einzeln berechnet und unmittelbar zugewiesen
werden, gehen diese neuen Werte schon in die Berechnung der anschließend
berechneten Werte ein.

Wünschenswert wäre natürlich, wenn
Abarbeitung in zwei Schritte getrennt
würden, also zuerst Berechnung aller neuen Werte, dann deren Zuweisung.
Dieses Verhalten kann ich natürlich einfach erzwingen, indem ich die
neuen Werte zunächst in ein temporäres Attribut schreibe und
dieses im
zweiten Schritt in value kopiere.

Sagt der SQL-Standard etwas darüber aus, welches Verhalten korrekt ist?
Was tun die üblichen Verdächtigen (MySQL, PostgreSQL,
Oracle, ...)?

Michael

--
Michael Schuerig
mailto:michael@schuerig.de
http://www.schuerig.de/michael/


[ Auf dieses Posting antworten ]

Antworten