sql >> データベース >  >> RDS >> Mysql

MySQL Insert Into Select

    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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。

    1. ORA-00933内部結合およびasとの混同

    2. MariaDBの列にあるすべての非数値を検索する

    3. MariaDBで大文字を含む行を見つける4つの方法

    4. Oracleの単純な再帰クエリ