
SQL文でIF文のような条件分岐を行いたい
SQL文で、いわゆるIF文のような動作を行いたいのですが、
調べてもいまいちわからなかったので質問させてください。
name、mail、ageフィールドがあり、いくらかのレコードが入っています。
sa sa@a.com 11
si sa@a.com 12
su sa@a.com 13
se sa@a.com 14
so sa@a.com 15
ここに、次の3つのレコード(nameはnull)
sa@a.com 21
si@a.com 22
su@a.com 23
を挿入しようと思います。
挿入レコードのmailフィールドの値が、すでに登録済みのあるレコードの値と同じなら、
このレコードに対して、新しいデータをUPDATEします。
登録済みのレコードに対して、
挿入するレコードにあるデータ(この場合はage)はUPDATEし、
挿入するレコードにないデータ(この場合はname)はそのまま更新します。
mailが違うなら、そのままINSERTを行います。
上の例だと実行結果は
sa sa@a.com 21
si si@a.com 22
su su@a.com 23
se se@a.com 14
so so@a.com 15
となるのですが、このようなSQL文を教えてください。
投稿日時 - 2012-02-08 09:35:51
このQ&Aは役に立ちましたか?
0人が「このQ&Aが役に立った」と投票しています
回答(3)
なんか回答の表現がわるかったのかうまく表示されないようなので
表現を変えて再投稿
create table hoge(name varchar(20),mail varchar(20) not null unique key,age int);
insert ignore into hoge values('sa','sa-xxxx',11),('si','si-xxxx',12),('su','su-xxxx',13),('se','se-xxxx',14),('so','so-xxxx',15);
insert into hoge(mail,age) values('sa-xxxx',@age:=21) on duplicate key update age=@age;
insert into hoge(mail,age) values('si-xxxx',@age:=22) on duplicate key update age=@age;
insert into hoge(mail,age) values('su-xxxx',@age:=23) on duplicate key update age=@age;
insert into hoge(mail,age) values('ka-xxxx',@age:=10) on duplicate key update age=@age;
投稿日時 - 2012-02-08 15:58:57
質問の例示でmailの内容が間違えてますね。
とりあえず拡大解釈するとして・・・
insert on duplicate構文をつかいます
http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html
//準備
create table hoge(name varchar(20),mail varchar(20) not null unique key,age int);
insert ignore into hoge values(
'sa','sa@a.com',11),(
'si','si@a.com',12),(
'su','su@a.com',13),(
'se','se@a.com',14),(
'so','so@a.com',15);
//insert & update
insert into hoge(mail,age) values('sa@a.com',@age:=21) on duplicate key update age=@age;
insert into hoge(mail,age) values('si@a.com',@age:=22) on duplicate key update age=@age;
insert into hoge(mail,age) values('su@a.com',@age:=23) on duplicate key update age=@age;
insert into hoge(mail,age) values('ka@a.com',@age:=10) on duplicate key update age=@age;
投稿日時 - 2012-02-08 10:25:13