Wie mache ich 3 Tabelle JOIN in UPDATE-Abfrage?

466

Ich stellte eine Frage und bekam diese Antwort, die half.

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1

Jetzt versuche ich dies zu tun, wenn es sich um 3 Tabellen handelt.

    UPDATE tableC c JOIN tableB b JOIN tableA a

Meine Frage ist im Grunde ... ist es möglich, 3 Table Join für eine UPDATEAnweisung durchzuführen? und was ist die richtige Syntax dafür? Vielen Dank. Mache ich das ...

 JOIN tableB, tableA
 JOIN tableB JOIN tableA
Ricky
quelle
2
Sicher ist es möglich. Versuche es. Die Syntax ist genau so, wie Sie sie haben - Sie müssen nur die nächste JOINund ihre ONBedingung hinzufügen , genau wie in einer SELECTAbfrage.
Michael Berkowski
2
UPDATE t1 JOIN t2 ON t1.id = t2.t1_id JOIN t3 ON t3.id = t2.t3_id SET t1.col = 'newval'
Michael Berkowski
1
Die erwähnte Frage ist hier: stackoverflow.com/questions/15206746/…
Urs

Antworten:

810

Die Antwort ist, dass yesSie können

versuche es so

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1

BEARBEITEN:

Für allgemeine Update-Join:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]
echo_Me
quelle
2
Seltsam ist jedoch, dass meine HeidiSQL-Software keine betroffenen Zeilen meldet, obwohl die Daten zeigen, dass die Aktualisierungen durchgeführt wurden.
Pianoman
1
@ Pianoman Für mich ist es auch passiert und es hat etwas mit ON UPDATE CURRENT_TIMESTAMP zu tun. Ich habe das Update nur manuell hinzugefügt und es behoben. Ich habe nur gesagt, ob es jemand anderem passiert
eric.itzhak
Wenn Sie eine visuelle Hilfe benötigen, um Ihre Joins korrekt zu machen: browse-tutorials.com/tutorial/mysql-joins-visual-representation
ram4nd
Ich denke, das Folgende ist ein besserer allgemeiner Plan: UPDATE table A JOIN table B ON {join data} JOIN table C ON {join data} JOIN {more join tables} SET A.column = {expression}(verzeihen Sie mir, wenn dieser verdammte Editor mich nicht in Zeilenumbrüche eintragen lässt, ohne einen vollständigen Beitrag zu
verfassen
Wo ist WHERE?? Oder WHEREist das nicht möglich?
Grün