• ベストアンサー

UPDATE文のエラー直せますでしょうか?

テーブル A と テーブル B は同じ構造です。 A のレコードを B のレコードで更新するにはどうすれば良いのでしょうか? UPDATE a Set( a.id = b.id, a.dat = b.dat ) FROM a INNER JOIN b ON a.id = b.id #1064 - You have an error in your SQL syntax; the right syntax to use near '( a.id = b.id, a.d = b.d ) FROM a INNER JOIN b ON a.id = b.id' at line 1 MySQL 5.1.33 CREATE TABLE `a` ( `id` INT NOT NULL , `dat` INT , PRIMARY KEY ( `id` ) );

質問者が選んだベストアンサー

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

UPDATE a, b Set a.id = b.id, a.dat = b.dat where a.id = b.id だとどうなります?

gotoumak
質問者

補足

ありがとうございます! 0 行変更しました。 なぜか、テーブル a のレコードが更新されませんでした。 もちろん、b.dat と a.dat の値は異なります。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

UPDATE a INNER JOIN b ON a.id = b.id SET a.dat=b.dat でいけませんか?

  • nda23
  • ベストアンサー率54% (777/1416)
回答No.2

UPDATE文にFROMは使わないのでは? UPDATE a INNER JOIN b ON a.id = b.id Set a.id = b.id, a.dat = b.dat これだと、どうでしょう。

gotoumak
質問者

お礼

ありがとうございます! しかし、 0 行変更しました。 なぜか、テーブル a のレコードが更新されません。 ところが、何でこんなに難しいの??と思ってテーブル作成からやり直したら、大成功でした! しかも、皆様のご回答、全て大成功でした!! bin-chanさん、yambejpさんも含めて皆様大正解だったというわけです。 (yambejpさんのご回答も、最初に実行した時は同様の0行変更でした) 申し訳ありませんでした。 原因は全くわかりませんが、bテーブル作成するときに、 create table b as (select * from a); としたせいかもしれません。(インデックスが張られていなかった) 2回目はcreate table をコピーして b テーブルを作成しました。 (違いはそれくらいしか思い浮かびませんが、実際の原因はわかりません) 皆様にお礼したいのですが、それも不可能なので、 圧倒的最速で教えていただいた bin-chanさん、 私にとってもっとも理解しやすかったコードの yambejpさんとさせていただきました。 nda23さん、本当にすみません。 皆さん本当にありがとうございました。