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

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]

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.