教えてください。

id(主)|u_id|date|field1|field2|

と言うフィールドを持つテーブル[tbl_1]があります。
ポストするデータのu_idとdateがテーブルのレコードと一致する場合、
field1及びfield2のデータを置換 若しくは、挿入し、
u_idとdateが一致しない場合、新しいレコードを挿入したいと
思うのですが、これをひとつの命令文として行うことはできるでしょうか。

以下、試してみたことです。

replace into tbl_1(field1,field2)
value(1111,2222)
where u_id='1' and date='20110420'

上記では、シンタックスエラーが返ってきました。
次に、

replace into tbl_1(u_id,date,field1,field2)
value(1,20110420,1111,2222)

としたところ、u_idとdateが一致するレコードがあっても、
新規レコードとして挿入されました。

1回の命令文で処理を行いたいと思うのですが、
やはり、処理は分けた方が良いのでしょうか。

ご回答よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

MySQLの質問をする場合は、MySQL 5.0、5.1といったレベルまで、最低限バージョンを明記してください。


大きな機能拡張に加え、一部の仕様変更があります。

「(u_id,`date`)の複合キーで重複した場合」とのことであり、primary key または uniqueキーにした上で、insert文の「on duplicate key update」構文を利用することで実装可能です。

replace文は、格納済みの行の特定列を更新するのでなく、行自体を置換してしまうのだったと記憶しています。

id列というprimary keyが必要なのかどうか不明ですが、uniqueキーを定義すると、例えば次のようなSQLになります。


-- 定義例
drop table if exists tbl1;
create table tbl1
(id int primary key auto_increment
,u_id int
,`date` date
,field1 int
,field2 int
,unique(u_id,`date`)
);


-- (u_id,`date`)が同一の行が存在しなければ追加、存在すれば更新
insert into tbl1
values(null,5,'2011-04-17',0,0)
on duplicate key
update field1=values(field1),field2=values(field2)
;

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/insert-on …
    • good
    • 0
この回答へのお礼

chukenkenkou様:

回答ありがとうございました。

ヒントだけでなく、そのものずばりのコードまで書いていただいて、
大変助かりました。

ご教示頂いたコードですんなりと問題を解決することができました。

ありがとうございました。

お礼日時:2011/04/18 10:31

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング