アプリ版:「スタンプのみでお礼する」機能のリリースについて

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文を教えてください。

A 回答 (3件)

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

    • good
    • 0

なんか回答の表現がわるかったのかうまく表示されないようなので


表現を変えて再投稿

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;
    • good
    • 0

質問の例示でmailの内容が間違えてますね。


とりあえず拡大解釈するとして・・・

insert on duplicate構文をつかいます

http://dev.mysql.com/doc/refman/5.1/ja/insert-on …

//準備
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;
    • good
    • 0

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