Às vezes você pode precisar inserir muitos valores de uma tabela em outra tabela no MySQL. Pode ser tedioso inserir manualmente esses valores em sua instrução INSERT sql. Veja como usar facilmente a instrução SELECT para inserir valores na tabela com a consulta MySQL INSERT INTO SELECT. Você pode usá-lo para preencher rapidamente tabelas MySQL.
Inserção do MySQL na seleção
Aqui estão os passos para inserir valores em tabelas MySQL usando a instrução INSERT INTO SELECT. Digamos que você tenha a seguinte tabela new_orders(id, order_date, amount)
mysql> create table new_orders(id int, order_date date, amount int);
Aqui está a sintaxe para a instrução MySQL INSERT INTO SELECT.
INSERT INTO table_name(column_list) SELECT select_list FROM another_table WHERE condition;
Na consulta acima, usamos uma instrução SELECT, em vez da cláusula VALUES. É muito útil copiar rapidamente uma ou mais linhas de outra tabela, ou mesmo dados de resumo de outra tabela.
Bônus de leitura:MySQL Select Top N Rows
Vejamos alguns exemplos para MySQL INSERT INTO SELECT.
MySQL INSERIR EM SELECIONAR MÚLTIPLAS LINHAS
Aqui está a consulta SQL para inserir várias linhas em uma tabela usando a instrução 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 | +------+------------+--------+
Você pode omitir os nomes das colunas após a cláusula INSERT se os nomes das colunas na instrução SELECT forem idênticos aos da sua tabela.
Bônus de leitura:MySQL remove registros duplicados
MySQL INSERT INTO SELECT FROM SAME TABLE
Aqui está a consulta SQL para inserir linhas da mesma tabela usando a instrução 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 | +------+------------+--------+
Na consulta acima, usamos MySQL INSERT INTO SELECT para todas as colunas em uma tabela.
Bônus de leitura:Como executar o procedimento armazenado
MySQL INSERT INTO SELECT de outro banco de dados
Aqui está a consulta SQL para inserir linhas de outro banco de dados painel . A única diferença é preceder o nome do banco de dados ao nome da tabela na consulta SELECT.
mysql> insert into users (user_id,date_joined) select id,date_joined from dashboard.auth_user;
Na consulta acima, usamos dashboard.auth_user em vez de apenas auth_user para especificar que esta tabela está em um banco de dados diferente.
Bônus de leitura:MySQL obtém registros duplicados
MySQL INSERT INTO SELECT na atualização duplicada
Se você inserir valores duplicados de chave primária ou índice em uma tabela, o MySQL lançará um erro. Na instrução INSERT INTO SELECT, você também pode instruir o MySQL a atualizar colunas específicas em caso de valores duplicados, usando a cláusula ON DUPLICATE KEY UPDATE. Aqui está um exemplo de MySQL INSERT INTO SELECT em atualização duplicada.
Digamos que você tenha a seguinte tabela x_orders(id, amount)
mysql> create table x_orders(id int auto_increment primary key, amount int);
Digamos que você tenha uma tabela new_orders que tenha valores duplicados para a coluna 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 | +------+------------+--------+
Digamos que você tente inserir valores da tabela new_orders em x_orders. Você receberá um erro como mostrado.
mysql> insert into x_orders(id,amount) select id, amount from new_orders; ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
Aqui está o SQL para usar a cláusula 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 | +----+--------+
O Ubiq facilita a visualização de dados em minutos e o monitoramento em painéis em tempo real. Experimente hoje!