[MySQL] Update-Statement mit Bedingungen

elmyth

Erfahrenes Mitglied
Guten Morgen in die Runde,

ich stehe gerade etwas auf dem Schlauch bei einem Update-Statement.
Die Situation ist folgende:

Tabelle A: name_alt, email_alt, name_neu, email_neu
Tabelle B: name, email

Ich möchte nun ein Update-Statement schreiben, welches zunächst prüft, ob der alte Wert aus Tabelle A dem aktellen Wert in Tabelle B entspricht: Ist Tabelle A.name_alt gleich Tabelle B.name, dann soll Tabelle A.name_neu in Tabelle B.name geschrieben werden - sonst nicht.
Wenn die Werte in Tabelle A NULL sind, soll auch nichts geupdatet werden.

Kann mir jemand auf die Sprünge helfen?

Schönen Gruß
 
Neuer Versuch.
Ich denke/hoffe das du den gesuchten Namen in einer Variablen oder so zwischengespeichert hast? Dann kannst du ihn ja in die Abfrage einbauen.

SQL:
UPDATE tabelle_b AS b
LEFT JOIN (SELECT name_neu FROM tabelle_a WHERE name_alt = 'dein_name') AS a
ON b.name = a.name_alt SET b.name = a.name_neu
 
Leider gibt es keine Variablen, da der Code nicht Teil einer PHP-Datei o. Ä. ist, sondern später als .sql-Datei importiert werden soll.
Ich werde deinen Ansatz dennoch mal weiterverflogen und mich über weitere Kommetare sehr freuen.
 
Zwei Fragen hätte ich da noch:
1. Wie sieht das Statement aus, wenn ich nicht nur "name", sondern noch weitere Attribute updaten möchte? Funktioniert das in EINEM Statement oder muss ich für jedes Attribut ein eigenes Update-Statement erstellen?

2. Da der JOIN auf den Namen gemacht wird, kann es doch zu einer verwechslung der Datensätze kommen.

Nochmals die Situation: Die Inhalte der zwei Tabellen sind quasi identisch, nur wo sich nichts in Tabelle B geändert hat, soll der neue Wert eingetragen werden.
 
Zuletzt bearbeitet:
Das geht in einem
SQL:
UPDATE
    b
    INNER JOIN a
        ON a.name_alt = b.name
SET
    b.name = a.name_neu,
    b.email = a.email_neu;
 
Zuletzt bearbeitet von einem Moderator:
... dabei wird aber doch nicht kontrolliert, ob a.email_alt der b.email entspricht, bevor diese überschrieben wird, oder?
 
Nein, wird es nicht.

Wenn es kontroliert werden sollte, dann müsste es im ON-Teil des INNER JOIN stehen.
 

Neue Beiträge

Zurück