Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insertion MySQL dans la sélection

Parfois, vous devrez peut-être insérer de nombreuses valeurs d'une table dans une autre table dans MySQL. Il peut être fastidieux d'entrer manuellement ces valeurs dans votre instruction INSERT sql. Voici comment utiliser facilement l'instruction SELECT pour insérer des valeurs dans la table avec la requête MySQL INSERT INTO SELECT. Vous pouvez l'utiliser pour remplir rapidement les tables MySQL.

Insérer MySQL dans la sélection

Voici les étapes pour insérer des valeurs dans les tables MySQL à l'aide de l'instruction INSERT INTO SELECT. Disons que vous avez le tableau suivant new_orders(id, order_date, amount)

mysql> create table new_orders(id int, order_date date, amount int);

Voici la syntaxe de l'instruction MySQL INSERT INTO SELECT.

INSERT INTO table_name(column_list)
SELECT 
   select_list 
FROM 
   another_table
WHERE
   condition;

Dans la requête ci-dessus, nous utilisons une instruction SELECT au lieu de la clause VALUES. Il est très utile de copier rapidement une ou plusieurs lignes d'une autre table, ou même des données récapitulatives d'une autre table.

Lecture bonus :MySQL Select Top N Rows

Regardons quelques exemples pour MySQL INSERT INTO SELECT.

MySQL INSÉRER DANS SÉLECTIONNER PLUSIEURS LIGNES

Voici la requête SQL pour insérer plusieurs lignes dans une table à l'aide de l'instruction INSERT INTO SELECT.

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 |
+------+------------+--------+

Vous pouvez omettre les noms de colonne après la clause INSERT si les noms de colonne dans l'instruction SELECT sont identiques à ceux de votre table.

Lecture bonus :MySQL supprime les enregistrements en double

MySQL INSERT INTO SELECT FROM SAME TABLE

Voici la requête SQL pour insérer des lignes de la même table à l'aide de l'instruction INSERT INTO SELECT.

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 |
+------+------------+--------+

Dans la requête ci-dessus, nous utilisons MySQL INSERT INTO SELECT pour toutes les colonnes d'une table.

Lecture bonus :comment exécuter une procédure stockée

MySQL INSERT INTO SELECT à partir d'une autre base de données

Voici la requête SQL pour insérer des lignes d'une autre base de données tableau de bord . La seule différence est d'ajouter le nom de la base de données au nom de votre table dans la requête SELECT.

mysql> insert into users (user_id,date_joined)
select id,date_joined
from dashboard.auth_user;

Dans la requête ci-dessus, nous avons utilisé dashboard.auth_user au lieu de simplement auth_user pour spécifier que cette table est dans une base de données différente.

Lecture bonus :MySQL obtient des enregistrements en double

MySQL INSERT INTO SELECT sur la mise à jour en double

Si vous insérez des valeurs de clé primaire ou d'index en double dans une table, MySQL génère une erreur. Dans l'instruction INSERT INTO SELECT, vous pouvez également demander à MySQL de mettre à jour des colonnes spécifiques en cas de valeurs en double, à l'aide de la clause ON DUPLICATE KEY UPDATE. Voici un exemple de MySQL INSERT INTO SELECT sur une mise à jour en double.

Disons que vous avez le tableau suivant x_orders(id, amount)

mysql> create table x_orders(id int auto_increment primary key, amount int);

Disons que vous avez une table new_orders qui a des valeurs en double pour la colonne id.

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 |
+------+------------+--------+

Supposons que vous essayez d'insérer des valeurs de la table new_orders dans x_orders. Vous obtiendrez une erreur comme indiqué.

mysql> insert into x_orders(id,amount)
       select id, amount
       from new_orders;
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Voici le SQL à utiliser la clause ON DUPLICATE KEY UPDATE.

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 facilite la visualisation des données en quelques minutes et la surveillance dans des tableaux de bord en temps réel. Essayez-le aujourd'hui !