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