Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstaw MySQL do Wybierz

Czasami może być konieczne wstawienie wielu wartości z jednej tabeli do innej tabeli w MySQL. Ręczne wprowadzanie tych wartości w instrukcji INSERT sql może być żmudne. Oto jak w prosty sposób używać instrukcji SELECT do wstawiania wartości do tabeli za pomocą zapytania MySQL INSERT INTO SELECT. Możesz go użyć do szybkiego zapełnienia tabel MySQL.

MySQL Wstaw do Wybierz

Oto kroki, aby wstawić wartości do tabel MySQL za pomocą instrukcji INSERT INTO SELECT. Załóżmy, że masz następującą tabelę nowe_zamówienia(id, data_zamówienia, kwota)

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

Oto składnia instrukcji MySQL INSERT INTO SELECT.

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

W powyższym zapytaniu używamy instrukcji SELECT zamiast klauzuli VALUES. Bardzo przydatne jest szybkie skopiowanie jednego lub więcej wierszy z innej tabeli lub nawet podsumowania danych z innej tabeli.

Przeczytaj bonus:MySQL wybierz N pierwszych wierszy

Spójrzmy na kilka przykładów dla MySQL INSERT INTO SELECT.

MySQL WSTAWIĆ W WYBRANE WIELOKROTNE WIERSZE

Oto zapytanie SQL do wstawienia wielu wierszy do tabeli za pomocą instrukcji 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 |
+------+------------+--------+

Możesz pominąć nazwy kolumn po klauzuli INSERT, jeśli nazwy kolumn w instrukcji SELECT są identyczne z tymi w Twojej tabeli.

Przeczytaj bonus:MySQL Usuń zduplikowane rekordy

MySQL WSTAWIĆ DO WYBORU Z TEJ SAMEJ TABELI

Oto zapytanie SQL do wstawiania wierszy z tej samej tabeli za pomocą instrukcji 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 |
+------+------------+--------+

W powyższym zapytaniu używamy MySQL INSERT INTO SELECT dla wszystkich kolumn w tabeli.

Przeczytaj bonus:Jak wykonać procedurę składowaną

MySQL INSERT INTO SELECT z innej bazy danych

Oto zapytanie SQL, które wstawia wiersze z innej bazy danych panel . Jedyną różnicą jest dodanie nazwy bazy danych do nazwy tabeli w zapytaniu SELECT.

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

W powyższym zapytaniu użyliśmy dashboard.auth_user zamiast po prostu auth_user aby określić, że ta tabela znajduje się w innej bazie danych.

Przeczytaj bonus:MySQL Uzyskaj zduplikowane rekordy

MySQL INSERT INTO SELECT przy zduplikowanej aktualizacji

Jeśli wstawisz zduplikowane wartości klucza podstawowego lub indeksu do tabeli, MySQL zgłosi błąd. W instrukcji INSERT INTO SELECT możesz również poinstruować MySQL, aby aktualizował określone kolumny w przypadku zduplikowanych wartości, używając klauzuli ON DUPLICATE KEY UPDATE. Oto przykład MySQL INSERT INTO SELECT przy zduplikowanej aktualizacji.

Załóżmy, że masz następującą tabelę x_orders(id, ilość)

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

Załóżmy, że masz tabelę new_orders, która zawiera zduplikowane wartości dla kolumny 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 |
+------+------------+--------+

Załóżmy, że próbujesz wstawić wartości z tabeli new_orders do x_orders. Pojawi się błąd, jak pokazano.

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

Oto kod SQL do użycia klauzuli 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 ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaki jest maksymalny rozmiar zapytania dla mysql?

  2. Jak skonfigurować replikację MySQL w RHEL, Rocky i AlmaLinux?

  3. 5 przydatnych zapytań MySql podczas tworzenia projektu

  4. Zmień separator dziesiętny w MySQL

  5. Zaktualizuj wartość kolumny, zastępując część ciągu