Hi,
Ich dachte mir jetzt, dass man vielleicht die WHERE Bedingungen aus der Anfrage irgendwie rausschneidet und sie an eine SELECT Anweisung anhängt. Dann müsste man doch theoretisch genau die Felder als Rückgabe erhalten, die von der UPDATE/DELETE Anweisung betroffen sind.
jein.
Ja, Du erhältst alle Datensätze, die potentiell geändert werden.
Nein, Datensätze, die sich nicht ändern, werden nicht geändert (und sollten nicht erfasst werden, was bei der WHERE-Methode der Fall ist).
Und wenn man die WHERE-Klausel entsprechend erweitern wuerde?
UPDATE tabelle SET spalte = 'xyz' WHERE id > 4711
wuerde nur die Datensaetze mit id > 4711 wirklich veraendern, bei denen spalte derzeit *nicht* den Wert 'xyz' hat.
Also wuerde ein
SELECT ... FROM tabelle WHERE id > 4711 AND spalte != 'xyz'
mir doch die liefern, die letztendlich wirklich zu aendern waeren ...
Bei Aenderung mehrerer Spalten muesste man die Abfragen auf deren Aenderung allesamt per OR verknupefen - es reicht ja, wenn einer der aktuellen Spaltenwerte abweicht.
Und sich Gedanken um die "Klammerung" machen -
WHERE (originale WHERE-Klausel-Bedingungen) AND (spalte1 != '...' OR ... OR spalteX != '...')
wuerd' ich vorschlagen, wenn ich mich da auf die Schnelle nicht vertue ...
Und natuerlich will das ganze dann auch noch in eine Transaktion verpackt werden, wenn man konsistente Ergebnisse haben moechte ...
MfG ChrisB