みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

条件付きでデータの置換と新規挿入

教えてください。

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回の命令文で処理を行いたいと思うのですが、
やはり、処理は分けた方が良いのでしょうか。

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

投稿日時 - 2011-04-16 16:29:38

QNo.6672437

暇なときに回答ください

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

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-duplicate.html

投稿日時 - 2011-04-16 19:59:07

お礼

chukenkenkou様:

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

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

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

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

投稿日時 - 2011-04-18 10:31:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問