tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 2 Beitrag von Yaslaw
  • 1 Beitrag von Yaslaw
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
602
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    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ß
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  3. #3
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    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.
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    elmyth und tombe bedanken sich. 
    ---------------------------------------------------------------------------------------------------
    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

  5. #5
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    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.

  6. #6
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    Danke für die Hinweise, so sieht es doch besser aus!

    Schönen Gruß und ein schönes Wochenende
     

  7. #7
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    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)
     

  8. #8
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  9. #9
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    ... dabei wird aber doch nicht kontrolliert, ob a.email_alt der b.email entspricht, bevor diese überschrieben wird, oder?
     

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  11. #11
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    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ß
     

  12. #12
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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;
    elmyth bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    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

  13. #13
    elmyth elmyth ist offline Mitglied Brokat
    Registriert seit
    Aug 2004
    Beiträge
    257
    Danke für den schnellen und ausführlichen Support.

    Schönes Wochenende
    elmyth
     

Ähnliche Themen

  1. [MySql] Update mit Bedingungen
    Von Ahiru im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 07.10.10, 16:51
  2. Oracle: Update einer Tabelle mit Bedingungen aus einem Select
    Von Mr_Tom im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 21.11.07, 21:55
  3. Update Statement zu Replace Into
    Von Loki2 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 28.01.07, 12:21
  4. Antworten: 4
    Letzter Beitrag: 05.10.05, 15:58
  5. Access sql - mehrere update-Bedingungen
    Von Mankind im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 05.05.05, 19:57