Subselect-Problem in UPDATE
Rico Koerner
rico at netbreaker.de
Mo Feb 9 19:46:43 CET 2009
Hallo,
ich habe hier 2 strukturell identische Ausgangstabellen 'gestern' und
'heute' und eine Zieltabelle 'ziel'.
gestern und heute haben u.a. eine Spalte 'id', 'uid' und 'name' und weitere.
Die gleiche uid kann mehrfach auftreten, hat dann aber auch immer
denselben Namen innerhalb einer der beiden Tabellen. (Redundanz)
Der Name kann sich allerdings in beiden Tabellen unterscheiden.
SELECT heute.uid, gestern.name, heute.name FROM gestern INNER JOIN heute
ON gestern.uid = heute.uid WHERE gestern.name != heute.name GROUP BY
heute.uid
gibt die gesuchten DS korrekt aus.
Für das Update des Namens bräuchte ich ja so etwas wie:
UPDATE ziel SET name=heute.name WHERE uid = (SELECT heute.uid,
heute.name FROM ...)
Aber das kann natürlich nicht funktionieren, da die Where-Bedingung ja
nur mit einem Wert vergleichen kann und nicht weiß welchen von beiden
und den anderen irgendwie an das SET weiterreichen müßte.
Ich wollte mir den Umweg über PHP sparen, da alle anderen SQL-Statements
auch in einem Shell-Skript mit
mysql ... -e ...
übergeben werden können.
Allerdings weiß ich auch nicht, wie ich die Ausgabe von obigen Select in
der Shell in einer Schleife für das UPDATE weiterverabeiten kann.
Zugänge mit
INSERT INTO ziel (uid, name, create_date) SELECT ...
und Abgänge mit
UPDATE ziel SET delete_date=NOW() WHERE uid = (SELECT ...)
und den entsprechenden abweichenden SubSelects funktionieren.
Kann mir jemand mit einem passenden SQL-Statement oder passenden
Shell-Code weiterhelfen?
Danke.
Gruß
Rico Körner