質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

2489閲覧

バルクインサートする値に別テーブルをひいて変換をかけたい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2019/06/11 09:52

編集2019/06/11 09:53

users テーブルに PK: id と user_name というカラムをもっていて

test テーブルにバルクインサートするとき username から users.id に変換したいです

これは syntax error でダメみたいですが

INSERT INTO test_table (user_id, date, val) VALUES ((select id from users where user_name = 'user1'),'2019-06-10',1), ((select id from users where user_name = 'user2'),'2019-06-10',2), ((select id from users where user_name = 'user3'),'2019-06-10',3), ON DUPLICATE KEY UPDATE val=VALUE(val);

のようなことをしたいですのですが MySQL で可能でしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

insert into ~ select で記述。

SQL

1INSERT INTO test_table (user_id, date, val) 2select id, '2019-06-10', val from ( 3 select id, 1 as val from users where user_name = 'user1' 4 union all 5 select id, 2 from users where user_name = 'user2' 6 union all 7 select id, 3 from users where user_name = 'user3' 8) temp 9ON DUPLICATE KEY UPDATE val=VALUE(val)

投稿2019/06/11 11:34

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/12 07:37

ありがとうございます VALUES ではなく SELECT の結果自体をバルクインサートにできるのですね 勉強になりました
guest

0

ベストアンサー

こうですね

  • 設定

※一部カラム名調整してあります

SQL

1create table users(id int primary key,user_name varchar(10)); 2insert into users values(101,'user1'),(102,'user2'),(103,'user3'),(104,'user4'); 3create table test_table(user_id int,dt date,val int);
  • insert

SQL

1insert into test_table(user_id, dt, val) 2select t2.id,'2019-06-10',t1.val from ( 3select 'user1' as user_name,1 as val 4union all select 'user2',2 5union all select 'user3',3 6) as t1 7inner join users as t2 on t1.user_name=t2.user_name 8 9

投稿2019/06/12 01:40

yambejp

総合スコア114814

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/12 07:36

ありがとうございます 回答をおふたりいただいて両方試してみたんですが こちらのほうが少し早かったのでベストアンサーにさせていただきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問