Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL Вмъкване в Select

Понякога може да се наложи да вмъкнете много стойности от една таблица в друга таблица в MySQL. Може да е досадно да въвеждате ръчно тези стойности във вашия оператор INSERT sql. Ето как лесно да използвате израза SELECT за вмъкване на стойности в таблица с MySQL INSERT INTO SELECT заявка. Можете да го използвате за бързо попълване на MySQL таблици.

MySQL Insert Into Select

Ето стъпките за вмъкване на стойности в MySQL таблици с помощта на оператор INSERT INTO SELECT. Да приемем, че имате следната таблица new_orders(id, order_date, amount)

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

Ето синтаксиса на MySQL INSERT INTO SELECT израз.

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

В горната заявка използваме израз SELECT вместо клауза VALUES. Много е полезно бързо да копирате един или повече редове от друга таблица или дори обобщени данни от друга таблица.

Бонус за четене:MySQL Изберете най-големи N редове

Нека разгледаме няколко примера за MySQL INSERT INTO SELECT.

MySQL INSERT В ИЗБРАНЕ НА МНОГО РЕДА

Ето SQL заявката за вмъкване на няколко реда в таблица с помощта на оператор 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 |
+------+------------+--------+

Можете да пропуснете имената на колоните след клаузата INSERT, ако имената на колоните в израза SELECT са идентични с тези във вашата таблица.

Бонус четене:MySQL премахва дублиращи се записи

MySQL INSERT В SELECT ОТ СЪЩАТА ТАБЛИЦА

Ето SQL заявката за вмъкване на редове от същата таблица с помощта на оператор 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 |
+------+------------+--------+

В горната заявка използваме MySQL INSERT INTO SELECT за всички колони в таблица.

Бонус четене:Как да изпълните съхранена процедура

MySQL INSERT INTO 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 Получаване на дублирани записи

MySQL INSERT INTO SELECT при дублирана актуализация

Ако вмъкнете дублирани стойности на първичен ключ или индекс в таблица, MySQL ще изведе грешка. В израза INSERT INTO SELECT можете също да инструктирате MySQL да актуализира конкретни колони в случай на дублиращи се стойности, като използвате клауза ON DUPLICATE KEY UPDATE. Ето пример за MySQL INSERT INTO SELECT при дублирана актуализация.

Да приемем, че имате следната таблица x_orders(id, amount)

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

Да приемем, че имате таблица new_orders, която има дублиращи се стойности за колона 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 |
+------+------------+--------+

Да кажем, че се опитвате да вмъкнете стойности от таблицата 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'

Ето SQL  за използване на клаузата 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 улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте днес!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да се свържа с MySQL от Java:NullPointerException в логиката на свързване на драйвера на MySQL

  2. Интегриране на MySQL с Python в Windows

  3. Не може да се получи пружинно зареждане за автоматично създаване на схема на база данни

  4. Свържете се с MySQL отдалечено

  5. mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows и т.н.... очаква параметър 1 да бъде ресурс