- ベストアンサー
【sql】DUPLICATE KEY UPについて
mysql で ON DUPLICATE KEY UPDATE といれると、 すでに同じプライマリキーのデータが存在した場合アップデートとして 扱われますが、プライマリキーが同じであり、かつ プラス条件を 課すことはできないのでしょうか? たとえば、プライマリキーが 5のデータを更新すると すでに、5のデータが存在した場合はアップデートとして扱われるが ただし、ある条件(日付が◯◯日以下等)に反する場合は アップデートも行われない。 というような処理です。
- みんなの回答 (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
お礼
回答有難うございます。 なるほど on duplicate key update のあとに ifをつけれるのですね。