MySQLのあるテーブルから別のテーブルに多くの値を挿入する必要がある場合があります。これらの値をINSERTsqlステートメントに手動で入力するのは面倒な場合があります。 SELECTステートメントを使用して、MySQL INSERTINTOSELECTクエリを使用してテーブルに値を簡単に挿入する方法は次のとおりです。これを使用して、MySQLテーブルにすばやくデータを入力できます。
MySQL Insert Into Select
INSERTINTOSELECTステートメントを使用してMySQLテーブルに値を挿入する手順は次のとおりです。次のテーブルがあるとしますnew_orders(id、order_date、amount)
mysql> create table new_orders(id int, order_date date, amount int);
MySQL INSERTINTOSELECTステートメントの構文は次のとおりです。
INSERT INTO table_name(column_list) SELECT select_list FROM another_table WHERE condition;
上記のクエリでは、VALUES句の代わりにSELECTステートメントを使用します。別のテーブルから1つ以上の行をすばやくコピーしたり、別のテーブルから要約データをコピーしたりすると非常に便利です。
ボーナス読み取り:MySQL Select Top N Rows
MySQL INSERTINTOSELECTのいくつかの例を見てみましょう。
MySQL INSERT INTO SELECT MULTIPLE ROWS
INSERTINTOSELECTステートメントを使用してテーブルに複数の行を挿入するSQLクエリは次のとおりです。
mysql> insert into new_orders select id, order_date, item_price from orders; mysql> select * from new_orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-01 | 150 | | 2 | 2020-07-01 | 235 | +------+------------+--------+
SELECTステートメントの列名がテーブルの列名と同じである場合は、INSERT句の後の列名を省略できます。
ボーナスリード:MySQLは重複レコードを削除します
MySQL INSERT INTO SELECT FROM SAME TABLE
INSERTINTOSELECTステートメントを使用して同じテーブルから行を挿入するSQLクエリは次のとおりです。
mysql> insert into new_orders select * from new_orders; mysql> select * from new_orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-01 | 150 | | 2 | 2020-07-01 | 235 | | 1 | 2020-07-01 | 150 | | 2 | 2020-07-01 | 235 | +------+------------+--------+
上記のクエリでは、テーブル内のすべての列にMySQL INSERTINTOSELECTを使用しています。
ボーナスリード:ストアドプロシージャの実行方法
別のデータベースからのMySQLINSERTINTO SELECT
別のデータベースから行を挿入するためのSQLクエリは次のとおりですダッシュボード 。唯一の違いは、SELECTクエリでデータベース名をテーブル名の前に追加することです。
mysql> insert into users (user_id,date_joined) select id,date_joined from dashboard.auth_user;
上記のクエリでは、 dashboard.auth_userを使用しました auth_userだけでなく このテーブルが別のデータベースにあることを指定します。
ボーナスリード:MySQL Get Duplicate Records
重複更新時のMySQLINSERTINTO SELECT
重複する主キーまたはインデックス値をテーブルに挿入すると、MySQLはエラーをスローします。 INSERT INTO SELECTステートメントでは、ON DUPLICATE KEY UPDATE句を使用して、値が重複している場合に特定の列を更新するようにMySQLに指示することもできます。重複更新時のMySQLINSERTINTOSELECTの例を次に示します。
次のテーブルがあるとしますx_orders(id、amount)
mysql> create table x_orders(id int auto_increment primary key, amount int);
id列の値が重複しているnew_ordersテーブルがあるとします。
mysql> select * from new_orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2020-07-01 | 150 | | 2 | 2020-07-01 | 235 | | 1 | 2020-07-01 | 150 | | 2 | 2020-07-01 | 235 | +------+------------+--------+
new_ordersテーブルの値をx_ordersに挿入しようとしたとします。図のようにエラーが発生します。
mysql> insert into x_orders(id,amount) select id, amount from new_orders; ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
ON DUPLICATEKEYUPDATE句を使用するSQLは次のとおりです。
mysql> insert into x_orders(id,amount) select id, amount from new_orders on duplicate key update id = RAND() * 100; mysql> select * from x_orders; +----+--------+ | id | amount | +----+--------+ | 27 | 235 | | 48 | 150 | | 58 | 235 | | 62 | 150 | +----+--------+
Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。