sql >> Base de Datos >  >> RDS >> Mysql

Insertar MySQL en Seleccionar

A veces, es posible que deba insertar muchos valores de una tabla en otra tabla en MySQL. Puede ser tedioso ingresar manualmente estos valores en su instrucción INSERT sql. Aquí se explica cómo usar fácilmente la declaración SELECT para insertar valores en la tabla con la consulta MySQL INSERT INTO SELECT. Puede usarlo para completar rápidamente las tablas de MySQL.

Insertar MySQL en Seleccionar

Estos son los pasos para insertar valores en tablas MySQL usando la declaración INSERT INTO SELECT. Supongamos que tiene la siguiente tabla nuevos_pedidos(id, fecha_del_pedido, cantidad)

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

Esta es la sintaxis de la declaración INSERT INTO SELECT de MySQL.

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

En la consulta anterior, usamos una declaración SELECT, en lugar de la cláusula VALUES. Es muy útil para copiar rápidamente una o más filas de otra tabla, o incluso resumir datos de otra tabla.

Lectura adicional:MySQL seleccione las N filas principales

Veamos algunos ejemplos de MySQL INSERT INTO SELECT.

MySQL INSERTAR EN SELECCIONAR MÚLTIPLES FILAS

Aquí está la consulta SQL para insertar múltiples filas en una tabla usando la instrucción 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 |
+------+------------+--------+

Puede omitir los nombres de las columnas después de la cláusula INSERT si los nombres de las columnas en la instrucción SELECT son idénticos a los de su tabla.

Lectura adicional:MySQL Eliminar registros duplicados

INSERTAR MySQL EN SELECCIONAR DESDE LA MISMA TABLA

Aquí está la consulta SQL para insertar filas de la misma tabla usando la instrucción 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 |
+------+------------+--------+

En la consulta anterior, usamos MySQL INSERT INTO SELECT para todas las columnas de una tabla.

Lectura adicional:Cómo ejecutar un procedimiento almacenado

MySQL INSERT INTO SELECT desde otra base de datos

Aquí está la consulta SQL para insertar filas desde otra base de datos dashboard . La única diferencia es anteponer el nombre de la base de datos al nombre de la tabla en la consulta SELECCIONAR.

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

En la consulta anterior, hemos utilizado dashboard.auth_user en lugar de solo auth_user para especificar que esta tabla está en una base de datos diferente.

Lectura adicional:MySQL Obtenga registros duplicados

MySQL INSERT INTO SELECT en actualización duplicada

Si inserta una clave principal duplicada o valores de índice en una tabla, MySQL generará un error. En la declaración INSERT INTO SELECT, también puede indicar a MySQL que actualice columnas específicas en caso de valores duplicados, utilizando la cláusula ON DUPLICATE KEY UPDATE. Aquí hay un ejemplo de MySQL INSERT INTO SELECT en una actualización duplicada.

Digamos que tiene la siguiente tabla x_orders(id, cantidad)

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

Digamos que tiene una tabla new_orders que tiene valores duplicados para la columna 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 intenta insertar valores de la tabla new_orders en x_orders. Obtendrá un error como se muestra.

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

Aquí está el SQL para usar la 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 |
+----+--------+

Ubiq facilita la visualización de datos en minutos y la supervisión en paneles en tiempo real. ¡Pruébalo hoy!