Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Inserisci in Seleziona

A volte potrebbe essere necessario inserire molti valori da una tabella in un'altra tabella in MySQL. Può essere noioso inserire manualmente questi valori nell'istruzione INSERT sql. Ecco come utilizzare facilmente l'istruzione SELECT per inserire valori nella tabella con la query MySQL INSERT INTO SELECT. Puoi usarlo per popolare rapidamente le tabelle MySQL.

Inserimento MySQL in Seleziona

Di seguito sono riportati i passaggi per inserire valori nelle tabelle MySQL utilizzando l'istruzione INSERT INTO SELECT. Supponiamo che tu abbia la seguente tabella new_orders(id, order_date, amount)

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

Ecco la sintassi per l'istruzione MySQL INSERT INTO SELECT.

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

Nella query precedente, utilizziamo un'istruzione SELECT, invece della clausola VALUES. È molto utile copiare rapidamente una o più righe da un'altra tabella, o anche dati di riepilogo da un'altra tabella.

Lettura bonus:MySQL Seleziona le prime N righe

Diamo un'occhiata ad alcuni esempi di MySQL INSERT INTO SELECT.

INSERISCI MySQL IN SELEZIONATE PIÙ RIGHE

Ecco la query SQL per inserire più righe in una tabella utilizzando l'istruzione 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 |
+------+------------+--------+

Puoi omettere i nomi delle colonne dopo la clausola INSERT se i nomi delle colonne nell'istruzione SELECT sono identici a quelli nella tua tabella.

Lettura bonus:MySQL rimuove i record duplicati

MySQL INSERT IN SELECT DALLA STESSA TABELLA

Ecco la query SQL per inserire righe dalla stessa tabella utilizzando l'istruzione 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 |
+------+------------+--------+

Nella query precedente, utilizziamo MySQL INSERT INTO SELECT per tutte le colonne di una tabella.

Bonus Leggi:Come eseguire la stored procedure

MySQL INSERT INTO SELECT da un altro database

Ecco la query SQL per inserire righe da un altro database dashboard . L'unica differenza è anteporre il nome del database al nome della tabella nella query SELECT.

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

Nella query precedente, abbiamo utilizzato dashboard.auth_user anziché solo auth_user per specificare che questa tabella si trova in un database diverso.

Lettura bonus:MySQL ottiene record duplicati

MySQL INSERT INTO SELECT su aggiornamento duplicato

Se inserisci una chiave primaria o valori di indice duplicati in una tabella, MySQL genererà un errore. Nell'istruzione INSERT INTO SELECT, puoi anche indicare a MySQL di aggiornare colonne specifiche in caso di valori duplicati, usando la clausola ON DUPLICATE KEY UPDATE. Ecco un esempio di MySQL INSERT INTO SELECT su aggiornamento duplicato.

Supponiamo che tu abbia la seguente tabella x_orders(id, amount)

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

Supponiamo che tu abbia una tabella new_orders che ha valori duplicati per la colonna 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 |
+------+------------+--------+

Diciamo che provi a inserire valori dalla tabella new_orders in x_orders. Riceverai un errore come mostrato.

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

Ecco la clausola SQL da utilizzare 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 semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!