✅ ¿Cómo insertar filas a partir de una select?

Te explicamos cómo insertar filas en una tabla a partir de una select en Postgres y MySQL. ¿Qué ocurre si ya existen filas con la misma clave primaria? Aquí te lo explicamos con ejemplos.

✅ ¿Cómo insertar filas a partir de una select?
Photo by Sofya / Unsplash

Te explicamos cómo insertar filas en una tabla a partir de una select en Postgres y MySQL. ¿Qué ocurre si ya existen filas con la misma clave primaria? Aquí te lo explicamos con ejemplos.

Introducción

Insertar filas en una tabla a partir de una select es una tarea común en bases de datos relacionales como PostgreSQL y MySQL. En este artículo, exploraremos paso a paso cómo realizar esta operación, resolviendo posibles inconvenientes cuando se enfrenta a filas con claves primarias duplicadas.

¿Cómo usar INSERT INTO SELECT POSTGRESQL?

Antes de sumergirnos en el proceso, entendamos la importancia de esta operación. Insertar datos desde una select es útil cuando deseamos copiar información de una tabla a otra, manteniendo la consistencia en nuestra base de datos.

Pasos para insertar filas

Preparación de la Select:

  • Construye tu sentencia select para recuperar los datos deseados.
SELECT columna1, columna2 FROM tabla_origen WHERE condicion;

Utiliza la Select en la Sentencia Insert:

  • Emplea la sentencia insert into select para agregar las filas seleccionadas en la tabla de destino.
INSERT INTO tabla_destino (columna1, columna2) SELECT columna1, columna2 FROM tabla_origen WHERE condicion;

Manejo de Claves Primarias Duplicadas:

  • Si la tabla de destino ya tiene filas con la misma clave primaria, considera opciones como utilizar ON CONFLICT en Postgres o ON DUPLICATE KEY UPDATE en MySQL para manejar conflictos.

Pros y Cons de Insertar Filas desde una Select

Pros Cons
Facilita la transferencia de datos específicos Puede generar duplicados si no se manejan adecuadamente
Optimiza el proceso de inserción Requiere cuidado con las claves primarias
Útil para migraciones de datos Rendimiento puede degradarse con grandes conjuntos

Ejemplos Prácticos

Ejemplo 1: Insertar Todas las Filas

Supongamos que queremos transferir todas las filas de la tabla usuarios a la tabla clientes. La sentencia sería:

INSERT INTO clientes SELECT * FROM usuarios;

Ejemplo 2: Manejo de Conflictos en PostgreSQL. No hacer nada.

En PostgreSQL, si queremos evitar conflictos al insertar filas con claves primarias duplicadas, podemos usar ON CONFLICT:

INSERT INTO clientes SELECT * FROM usuarios
ON CONFLICT (id) DO NOTHING;

Ejemplo 3: Manejo de Conflictos en PostgreSQL. Actualizando.

También podemos optar por actualizar los campos de las filas que han dado conflicto. Para ayudarnos con esta tarea PostgreSQL nos facilita una tabla llamada: EXCLUDED que contiene la fila que se iba a insertar. Teniendo esto en cuenta tendremos:

INSERT INTO clientes SELECT * FROM usuarios
ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email;

❓ ¿Cómo insertar filas a partir de una select? - FAQs

1. ¿Puedo insertar filas en una tabla de otra base de datos?

Sí, siempre y cuando tengas los permisos necesarios, puedes utilizar la fully qualified table name para referenciar la tabla de la otra base de datos.

2. ¿Qué ocurre si la select devuelve un conjunto vacío?

En ese caso, la sentencia insert no agregará ninguna fila a la tabla de destino.

3. ¿Cómo manejar claves primarias compuestas?

Debes asegurarte de que la estructura de las claves primarias coincida en ambas tablas y ajustar la sentencia select en consecuencia.

4. ¿Es posible insertar solo algunas columnas seleccionadas?

Sí, puedes especificar las columnas deseadas tanto en la select como en la sentencia insert.

5. ¿Cuál es la diferencia entre Postgres y MySQL en este contexto?

Postgres utiliza ON CONFLICT para manejar conflictos, mientras que MySQL usa ON DUPLICATE KEY UPDATE.

6. ¿Hay limitaciones en la cantidad de filas que puedo insertar?

Lo normal es que no, el motor de base de datos insertará las filas que haya encontrado en la query pero, es posible que el rendimiento de tu base de datos se vea afectado.

Conclusión

En resumen, insertar filas a partir de una select es una técnica poderosa en el arsenal de un desarrollador de bases de datos. Al entender los pasos involucrados y cómo manejar posibles conflictos, puedes realizar esta operación con confianza. Asegúrate de adaptar la sintaxis según el motor de base de datos que estés utilizando y ¡explora nuevas posibilidades en la transferencia de datos!