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ś!