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件)
- 最新から表示
- 回答順に表示
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;
No.1
- 回答日時:
質問の例示で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;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Oracle 列1と列2の関係性で列3の条件に一致するレコードを抽出したい 1 2022/04/13 07:46
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
3つ以上のテーブルをUNIONする...
-
Access 削除クエリが重い
-
データの二重表示の原因
-
Accessにインポートしたら並び...
-
Access VBA Me.Requery レコー...
-
非連結サブフォームのレコード...
-
MySQLでTIMESTAMP型の列から現...
-
数百万件レコードのdelete
-
Access 1レコードずつcsvで出力...
-
世代管理をするデータベース設...
-
Accessでの排他制御
-
ManagementStudioからのデータ削除
-
Accessでレコードが更新された...
-
2つの項目が重複するレコード...
-
Accessでの禁止文字チェック
-
パススルークエリの使い方
-
OUTER JOIN と TOP10との組み合...
-
SQLデータ修正時に『このレコー...
-
ファイルメーカーで週間予定表
-
レコードロックする方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessにインポートしたら並び...
-
3つ以上のテーブルをUNIONする...
-
データの二重表示の原因
-
数百万件レコードのdelete
-
Access VBA Me.Requery レコー...
-
2つの項目が重複するレコード...
-
Access 1レコードずつcsvで出力...
-
ACCESSのBookmarkプロパティの...
-
SQLの複数のカウントについて
-
ManagementStudioからのデータ削除
-
SQLServerで同一条件レコードの...
-
Accessでの禁止文字チェック
-
Access 削除クエリが重い
-
Accessでレコードが更新された...
-
非連結サブフォームのレコード...
-
Accessでの排他制御
-
Access カレントレコードがあり...
-
Accessの重複クエリで最小以外...
-
(ACCESS)並び替えをしないで...
-
テーブルのレコード削除ができ...
おすすめ情報