Añadir registros con INSERT INTO a una tabla con los resultados de otra consulta SELECT

base de datos MySQL

Servidor de base de datos MySQL con phpMyAdmin

Bienvenidos a VerTutoriales.com, en esta ocasión vamos a ver una consulta un poco más avanzada de MySQL, ya que realiza una inserción en una tabla con el resultado de una consulta de otra, todo en la misma consulta. Aunque hablemos sobre MySQL, esta consulta será muy parecida en otros lenguajes SQL como SQL Server.

En ocasiones, es necesario realizar consultas algo más complejas, ya sea por mantenimiento de una base de datos, por la importación de datos o por mejoras y optimización en nuestro software, de manera que creamos nuevas tablas intermedias, por añadir nuevos módulos, etc… En nuestro caso, vamos a realizar una consulta suponiendo que vamos a crear esa tabla intermedia de “Clientes” y “Agrupaciones” donde Agrupaciones estaba como campo único en la tabla cliente (varios clientes con 1 agrupación N-1) para transformarlo en un valor múltiple del cliente (varios clientes con varias agrupaciones N-N).

Veamos la consulta:

INSERT INTO cliente_agrupacion (idcliente, idAgrupacion) SELECT idcliente, agrupacion AS grupo FROM clienteset;

En la consulta de inserción anterior, con respecto a otra consulta insert más típica, es que en vez de pasarle una lista de valores para insertar, le estamos pasando una lista de valores al vuelo, de manera que se insertan según el resultado de la consulta SELECT con los campos de idcliente y agrupación (con el nombre grupo) de la tabla clienteset.

En otras palabras y dándole la vuelta, hacemos una SELECT que nos devuelve un conjunto de valores de la tabla clienteset devolviendo idcliente y agrupacion, y este resultado, lo insertamos a la tabla cliente_agrupacion en el que queremos contener los valores idcliente e idAgrupación.

Espero que la explicación os sea clara y sino siempre podéis preguntar en los comentarios!

Te puede interesar:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *