web-dev-qa-db-ja.com

WHERE句を使用した複数のテーブルでのMySQL UPDATE構文

場合:

idが等しい_table1_のデータで_table2_を更新する方法は?

問題:

次の更新ステートメントを実行すると、_table1_のすべてのレコードが更新されます(_table1_のidフィールドが_table2_に存在しない場合でも)。

複数の更新テーブル構文を使用して、idが_table1_に存在し、等しい場合にのみ_table2_のレコードのみを更新するにはどうすればよいですか?

_UPDATE table1,table2
SET table1.value=table2.value 
WHERE table2.id=table1.id
_

前もって感謝します。

14
Ben

UPDATEに結合したMySQLの正しい構文は次のとおりです。

UPDATE  table1 a
        INNER JOIN table2 b
            ON a.ID = b.ID
SET     a.value = b.value 
26
John Woo

[〜#〜] edit [〜#〜]MySqlの場合は

UPDATE table1 t1 INNER JOIN 
       table2 t2 ON t2.id = t1.id
   SET t1.value = t2.value 

sqlfiddle

元の回答はSQL Server用でした

UPDATE table1
   SET table1.value = table2.value 
  FROM table1 INNER JOIN 
       table2 ON table2.id=table1.id

sqlfiddle

4
peterm

これを試すことができます:

UPDATE TABLE1
SET column_name = TABLE2.column_name
FROM TABLE1, TABLE2
WHERE TABLE1.id = TABLE2.id
2
UPDATE table1
SET table1.value = (select table2.value 
WHERE table2.id=table1.id)
0
jmontross