sql >> Database >  >> RDS >> Mysql

MySQL invoegen in selecteren

Soms moet u mogelijk veel waarden uit de ene tabel invoegen in een andere tabel in MySQL. Het kan vervelend zijn om deze waarden handmatig in uw INSERT sql-instructie in te voeren. Hier leest u hoe u eenvoudig de SELECT-instructie kunt gebruiken om waarden in de tabel in te voegen met de MySQL INSERT INTO SELECT-query. Je kunt het gebruiken om snel MySQL-tabellen te vullen.

MySQL invoegen in selectie

Hier zijn de stappen om waarden in MySQL-tabellen in te voegen met behulp van de instructie INSERT INTO SELECT. Stel dat u de volgende tabel new_orders(id, order_date, bedrag) heeft

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

Dit is de syntaxis voor de MySQL INSERT INTO SELECT-instructie.

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

In de bovenstaande query gebruiken we een SELECT-instructie in plaats van een VALUES-clausule. Het is erg handig om snel een of meer rijen uit een andere tabel te kopiëren, of zelfs samenvattingsgegevens uit een andere tabel.

Bonus Lezen:MySQL Selecteer Top N Rijen

Laten we een paar voorbeelden bekijken voor MySQL INSERT INTO SELECT.

MySQL INSERT IN SELECT MEERDERE RIJEN

Hier is de SQL-query om meerdere rijen in een tabel in te voegen met de instructie 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 |
+------+------------+--------+

U kunt de kolomnamen na de INSERT-clausule weglaten als de kolomnamen in de SELECT-instructie identiek zijn aan die in uw tabel.

Bonus Lezen:MySQL Verwijder dubbele records

MySQL INVOEGEN IN SELECTIE UIT DEZELFDE TABEL

Hier is de SQL-query om rijen uit dezelfde tabel in te voegen met de instructie 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 |
+------+------------+--------+

In de bovenstaande query gebruiken we MySQL INSERT INTO SELECT voor alle kolommen in een tabel.

Bonus Lezen:Hoe de opgeslagen procedure uit te voeren

MySQL INSERT INTO SELECT van een andere database

Hier is de SQL-query om rijen in te voegen uit een andere database dashboard . Het enige verschil is dat u de databasenaam voor uw tabelnaam moet plaatsen in de SELECT-query.

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

In de bovenstaande zoekopdracht hebben we dashboard.auth_user . gebruikt in plaats van alleen auth_user om aan te geven dat deze tabel zich in een andere database bevindt.

Bonus lezen:MySQL krijgt dubbele records

MySQL INSERT INTO SELECT bij dubbele update

Als u dubbele primaire sleutel- of indexwaarden in een tabel invoegt, geeft MySQL een foutmelding. In de instructie INSERT INTO SELECT kunt u MySQL ook instrueren om specifieke kolommen bij te werken in het geval van dubbele waarden, met behulp van de ON DUPLICATE KEY UPDATE-clausule. Hier is een voorbeeld van MySQL INSERT INTO SELECT bij dubbele update.

Stel dat u de volgende tabel x_orders(id, bedrag) . heeft

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

Stel dat u een tabel new_orders heeft met dubbele waarden voor de id-kolom.

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

Stel dat u waarden uit de tabel new_orders probeert in te voegen in x_orders. U krijgt een foutmelding zoals weergegeven.

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

Dit is de SQL om de clausule ON DUPLICATE KEY UPDATE te gebruiken.

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 maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!

  1. Verwijzen naar een alias elders in de SELECT-lijst

  2. ProxySQL uitvoeren als een helpercontainer op Kubernetes

  3. WHERE-clausules groeperen in Codeigniter

  4. Load balancing met ProxySQL voor Percona XtraDB Cluster