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

MySQL Indsæt i Vælg

Nogle gange skal du muligvis indsætte mange værdier fra en tabel i en anden tabel i MySQL. Det kan være trættende manuelt at indtaste disse værdier i din INSERT sql-sætning. Sådan bruger du nemt SELECT-sætningen til at indsætte værdier i tabellen med MySQL INSERT INTO SELECT-forespørgsel. Du kan bruge det til hurtigt at udfylde MySQL-tabeller.

MySQL Indsæt i Vælg

Her er trinene til at indsætte værdier i MySQL-tabeller ved hjælp af INSERT INTO SELECT-sætning. Lad os sige, at du har følgende tabel nye_ordrer(id, ordredato, beløb)

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

Her er syntaksen for MySQL INSERT INTO SELECT-sætning.

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

I ovenstående forespørgsel bruger vi en SELECT-sætning i stedet for VALUES-sætning. Det er meget nyttigt hurtigt at kopiere en eller flere rækker fra en anden tabel, eller endda oversigtsdata fra en anden tabel.

Bonus Læs:MySQL Vælg Top N Rows

Lad os se på et par eksempler for MySQL INSERT INTO SELECT.

MySQL INDSÆT I VÆLG FLERE RÆKKER

Her er SQL-forespørgslen til at indsætte flere rækker i en tabel ved hjælp af INSERT INTO SELECT-sætning.

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

Du kan udelade kolonnenavnene efter INSERT-sætningen, hvis kolonnenavnene i SELECT-sætningen er identiske med dem i din tabel.

Bonus Læs:MySQL Fjern duplikerede poster

MySQL INDSÆT I VÆLG FRA SAMME TABEL

Her er SQL-forespørgslen til at indsætte rækker fra samme tabel ved hjælp af INSERT INTO SELECT-sætning.

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

I ovenstående forespørgsel bruger vi MySQL INSERT INTO SELECT for alle kolonner i en tabel.

Bonuslæser:Sådan udføres lagret procedure

MySQL INSERT INTO SELECT fra en anden database

Her er SQL-forespørgslen til at indsætte rækker fra en anden databases dashboard . Den eneste forskel er at sætte databasenavnet foran dit tabelnavn i SELECT-forespørgslen.

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

I ovenstående forespørgsel har vi brugt dashboard.auth_user i stedet for blot auth_user for at angive, at denne tabel er i en anden database.

Bonus Læs:MySQL Få Duplicate Records

MySQL INSERT INTO SELECT på dubletopdatering

Hvis du indsætter dublerede primærnøgle- eller indeksværdier i en tabel, vil MySQL give en fejl. I INSERT INTO SELECT-sætningen kan du også instruere MySQL til at opdatere specifikke kolonner i tilfælde af duplikerede værdier ved at bruge ON DUPLICATE KEY UPDATE-klausulen. Her er et eksempel på MySQL INSERT INTO SELECT ved dubletopdatering.

Lad os sige, at du har følgende tabel x_orders(id, amount)

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

Lad os sige, at du har new_orders-tabel, som har duplikerede værdier for id-kolonnen.

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

Lad os sige, at du prøver at indsætte værdier fra new_orders-tabellen i x_orders. Du får en fejl som vist.

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

Her er SQL, der skal bruges ON DUPLICATE KEY UPDATE-klausulen.

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 gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!

  1. SQL VÆLG SUM

  2. TO_DSINTERVAL() Funktion i Oracle

  3. Udfør dynamisk forespørgsel med go i sql

  4. Sådan fejlfindes problemer med MySQL-defineret