• 締切済み

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

みんなの回答

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.3

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

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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;

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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;