sql >> Databáze >  >> RDS >> Mysql

Vložit do výběru MySQL

Někdy může být potřeba vložit mnoho hodnot z jedné tabulky do jiné tabulky v MySQL. Může být únavné ručně zadávat tyto hodnoty do příkazu INSERT sql. Zde je návod, jak snadno použít příkaz SELECT k vložení hodnot do tabulky pomocí dotazu INSERT INTO SELECT MySQL. Můžete jej použít k rychlému naplnění tabulek MySQL.

Vložit MySQL do výběru

Zde jsou kroky pro vložení hodnot do tabulek MySQL pomocí příkazu INSERT INTO SELECT. Řekněme, že máte následující tabulku nové_objednávky(id, datum_objednávky, částka)

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

Zde je syntaxe příkazu INSERT INTO SELECT MySQL.

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

Ve výše uvedeném dotazu používáme místo klauzule VALUES příkaz SELECT. Je velmi užitečné rychle zkopírovat jeden nebo více řádků z jiné tabulky nebo dokonce souhrnná data z jiné tabulky.

Bonusové čtení:MySQL Select Top N Rows

Podívejme se na několik příkladů pro MySQL INSERT INTO SELECT.

VLOŽENÍ MySQL DO VYBRANÝCH VÍCE ŘÁDKŮ

Zde je dotaz SQL pro vložení více řádků do tabulky pomocí příkazu 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 |
+------+------------+--------+

Názvy sloupců za klauzulí INSERT můžete vynechat, pokud jsou názvy sloupců v příkazu SELECT totožné s názvy ve vaší tabulce.

Bonusové čtení:MySQL Odstraňte duplicitní záznamy

MySQL INSERT DO SELECT ZE STEJNÉ TABULKY

Zde je dotaz SQL pro vložení řádků ze stejné tabulky pomocí příkazu 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 |
+------+------------+--------+

Ve výše uvedeném dotazu používáme MySQL INSERT INTO SELECT pro všechny sloupce v tabulce.

Bonusové čtení:Jak provést uloženou proceduru

MySQL INSERT INTO SELECT z jiné databáze

Zde je dotaz SQL pro vložení řádků z jiné databáze dashboard . Jediný rozdíl je přidat název databáze před název vaší tabulky ve SELECT dotazu.

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

Ve výše uvedeném dotazu jsme použili dashboard.auth_user namísto pouhého auth_user určit, že tato tabulka je v jiné databázi.

Bonusové čtení:MySQL získává duplicitní záznamy

MySQL INSERT INTO SELECT při duplicitní aktualizaci

Pokud do tabulky vložíte duplicitní primární klíč nebo hodnoty indexu, MySQL vyvolá chybu. V příkazu INSERT INTO SELECT můžete také dát MySQL pokyn k aktualizaci konkrétních sloupců v případě duplicitních hodnot pomocí klauzule ON DUPLICATE KEY UPDATE. Zde je příklad MySQL INSERT INTO SELECT při duplicitní aktualizaci.

Řekněme, že máte následující tabulku x_orders(id, částka)

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

Řekněme, že máte tabulku new_orders, která má duplicitní hodnoty pro sloupec 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 |
+------+------------+--------+

Řekněme, že se pokusíte vložit hodnoty z tabulky new_orders do x_orders. Zobrazí se zobrazená chyba.

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

Zde je klauzule SQL, kterou lze použít 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 usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!

  1. PostgreSQL + Hibernate + Spring automaticky vytváří databázi

  2. Jak uniknout apostrofu (') v MySql?

  3. Jak získám ID více vložených řádků v MySQL?

  4. oracle -- Rozdělte více hodnot oddělených čárkou v tabulce Oracle na více řádků