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

回答受付中の質問

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

QNo.7292573

困ってます

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

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

回答(3)

ANo.3

このテーブルの主キーはなんですか。

投稿日時 - 2012-02-08 16:31:16

ANo.2

なんか回答の表現がわるかったのかうまく表示されないようなので
表現を変えて再投稿

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

ANo.1

質問の例示で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