3Danke
ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
602
602
EMPFEHLEN
-
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ß
-
17.11.11 12:09 #2
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
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.
Code sql:1 2 3
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
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
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.
-
Ungetestet
Code sql:1 2 3 4 5 6
UPDATE b INNER JOIN a ON a.name_alt = b.name SET b.name = a.name_neu
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
17.11.11 14:23 #5
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
@yaslaw: Wie nicht anders zu erwarten hast du wieder die richtige Lösung!
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Danke für die Hinweise, so sieht es doch besser aus!
Schönen Gruß und ein schönes Wochenende
-
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.Geändert von elmyth (18.11.11 um 12:32 Uhr)
-
Das geht in einem
Code sql:1 2 3 4 5 6 7
UPDATE b INNER JOIN a ON a.name_alt = b.name SET b.name = a.name_neu, b.email = a.email_neu;
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
... 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.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Dann sähe der Code folgendermaßen aus?
Code :1 2 3 4 5 6 7 8 9
UPDATE b INNER JOIN a ON a.name_alt = b.name INNER JOIN a ON a.email_alt = b.email SET b.name = a.name_neu, b.email = a.email_neu;
... ein multipler INNER JOIN wirds hier auch nicht richten, oder?
Kannst du denn bitte mal ein Beispiel geben, wie das ganze in einem Statement aussehen würde?
Gruß
-
Kommt jetzt drauf an.
Dein Code der sucht den Entrag name_alt und überträgt dann den neuen Namen. Zudem sucht er die email_alt, dies jedoch unabhängig vom Namen.
(Achja, beim zweiten INNER JOIN müsstest du ein Alias mitgeben)
Aber ich denke, du willst eher die para name/email zusammenbehalten
Dann verknüpft man die JOIN-Bedinung mit AND.
Über JOIN gibts übrigens im WWW viele Anleitungen
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-- Variant das name und email zusammengehören UPDATE b INNER JOIN a ON a.name_alt = b.name AND a.email_alt = b.email SET b.name = a.name_neu, b.email = a.email_neu; --variante das name und email nicht zusammengehören UPDATE b INNER JOIN a ON a.name_alt = b.name INNER JOIN a AS c ON c.email_alt = b.email SET b.name = a.name_neu, b.email = c.email_neu;
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke für den schnellen und ausführlichen Support.
Schönes Wochenende
elmyth
Ähnliche Themen
-
[MySql] Update mit Bedingungen
Von Ahiru im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 07.10.10, 16:51 -
Oracle: Update einer Tabelle mit Bedingungen aus einem Select
Von Mr_Tom im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 21.11.07, 21:55 -
Update Statement zu Replace Into
Von Loki2 im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 28.01.07, 12:21 -
UPDATE-Aufforderung mit mehreren Bedingungen
Von Manstein im Forum PHPAntworten: 4Letzter Beitrag: 05.10.05, 15:58 -
Access sql - mehrere update-Bedingungen
Von Mankind im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 05.05.05, 19:57





Zitieren


Login





