76 - Insertar registros con valores de otra tabla (insert - select) |
Tenemos las tabla "libros" y "editoriales" creadas. La tabla "libros" contiene registros; "editoriales", no.
La tabla "libros" tiene la siguiente estructura:
-codigo: int unsigned auto_increment, -titulo: varchar(30), -autor: varchar(30), -editorial: varchar(20), -precio: decimal(5,2) unsigned, -clave primaria: codigo.
La tabla "editoriales" tiene la siguiente estructura:
-nombre: varchar(20).
Queremos insertar registros en la tabla "editoriales", los nombres de las distintas editoriales de las cuales tenemos libros.
Podemos lograrlo en 2 pasos, con varias sentencias:
1º paso: consultar los nombres de las distintas editoriales de "libros":
select distinct editorial from libros;
obteniendo una salida como la siguiente:
editorial _________ Emece Paidos Planeta
2º paso: insertar los registros uno a uno en la tabla "editoriales":
insert into editoriales (nombre) values('Emece'); insert into editoriales (nombre) values('Paidos'); insert into editoriales (nombre) values('Planeta');
O podemos lograrlo en un solo paso, realizando el "insert" y el "select" en una misma sentencia:
insert into editoriales (nombre) select distinct editorial from libros;
Entonces, se puede insertar registros en una tabla con la salida devuelta por una consulta; para ello escribimos la consulta y le anteponemos "insert into", el nombre de la tabla en la cual ingresaremos los registros y los campos que se cargarán.
También podemos crear una tabla llamada "cantidadporeditorial":
create table cantidadporeditorial( nombre varchar(20), cantidad smallint unsigned );
e ingresar registros a partir de una consulta a la tabla "libros":
insert into cantidadporeditorial (nombre,cantidad) select editorial,count(*) as cantidad from libros group by editorial;
Si los campos presentados entre paréntesis son menos (o más) que las columnas devueltas por la consulta, aparece un mensaje de error y la sentencia no se ejecuta.