電子書籍の厳選無料作品が豊富!

mysql で  ON DUPLICATE KEY UPDATE  といれると、
すでに同じプライマリキーのデータが存在した場合アップデートとして
扱われますが、プライマリキーが同じであり、かつ プラス条件を
課すことはできないのでしょうか?

たとえば、プライマリキーが 5のデータを更新すると
すでに、5のデータが存在した場合はアップデートとして扱われるが
ただし、ある条件(日付が◯◯日以下等)に反する場合は
アップデートも行われない。

というような処理です。

A 回答 (1件)

単純にifで場合分けするだけでしょうね、以下例



//元データ
create table tbl (id int not null auto_increment primary key,data varchar(30),flg tinyint not null);
insert into tbl(id,data) values(1,'a'),(2,'b'),(3,'c');
select * from tbl;

id,data,flg
1,a,0
2,b,0
3,c,0

//id=4,dataを'x'を挿入
insert into tbl (id,data) values(4,@data:='x')
on duplicate key update data=if(flg=0,@data,data);
select * from tbl;

id,data,flg
1,a,0
2,b,0
3,c,0
4,x,0

//id=4のdataを'y'に更新、ただしflgが0の場合→flgは0なので更新
insert into tbl (id,data) values(4,@data:='y')
on duplicate key update data=if(flg=0,@data,data);
select * from tbl;

id,data,flg
1,a,0
2,b,0
3,c,0
4,y,0

//id=4のdataを'z'に更新、ただしflgが1の場合→flgは0なので更新されない
insert into tbl (id,data) values(4,@data:='z')
on duplicate key update data=if(flg=1,@data,data);
select * from tbl;

id,data,flg
1,a,0
2,b,0
3,c,0
4,y,0
    • good
    • 0
この回答へのお礼

回答有難うございます。
なるほど on duplicate key update のあとに
ifをつけれるのですね。

お礼日時:2014/05/07 18:21

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