javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.

miércoles, 18 de junio de 2008

SELECT INTO en MySQL

En algunas ocasiones necesitamos guardar el resultado de una consulta en otra tabla dentro de la base de datos, para ello en algunos manejadores de base de datos contamos con el comando SELECT INTO ..., pero éste no existe en MySQL, en su lugar deberemos usar el comando INSERT INTO ... SELECT.

La manera para usar este comando es muy sencilla. Vamos a suponer que contamos con las tablas pais y usuario:

CREATE TABLE pais (
id INTEGER UNSIGNED NOT NULL,
nombre VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
)
TYPE=InnoDB;

CREATE TABLE usuario (
id BIGINT NOT NULL,
pais_id INTEGER UNSIGNED NOT NULL,
nombre VARCHAR(150) NOT NULL,
PRIMARY KEY(id, pais_id),
INDEX usuario_FKIndex1(pais_id),
FOREIGN KEY(pais_id)
REFERENCES pais(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
)
TYPE=InnoDB;

Ahora deseamos guardar en otra tabla únicamente el nombre de los usuarios y el nombre del país al que pertenece. Para esto crearemos una tabla llamada usuario_pais en la que vamos a depositar estos datos:

CREATE TABLE usuario_pais (
usuario_nombre VARCHAR(150) NOT NULL,
pais_nombre VARCHAR(100) NOT NULL,
PRIMARY KEY(usuario_nombre)
)
TYPE=InnoDB;

Una vez que ya se tienen las 3 tablas, deberemos ejecutar el comando INSERT INTO ... SELECT para guardar los nombres de los usuarios y sus países en la tercer tabla que creamos. Esto se hace de la siguiente manera:

mysql> INSERT INTO usuario_pais (usuario_nombre,pais_nombre)
SELECT usuario.nombre, pais.nombre FROM
usuario
INNER JOIN pais ON usuario.pais_id=pais.id;

Esto habrá guardado los registros que encontró en la tabla usuario_pais, y en mi caso el contenido de mi tabla queda de esta manera:

mysql> select * from usuario_pais;
+----------------+-------------+
| usuario_nombre | pais_nombre |
+----------------+-------------+
| Beatriz Guzmán | Portugal |
| Juan Pérez | México |
+----------------+-------------+

Listo, con esto ya pueden mandar el resultado de una consulta a otra tabla.

2 comentarios:

Rafa dijo...

Gracias es lo que andaba buscando

Anónimo dijo...

buenas como lo haria con tres tablas si puedes ayudarme mi correo carlospernalete@hotmail.com