Crear una tabla temporal en una sentencia SELECT sin una CREATE TABLE separada

¿Es posible crear una tabla temporal (sólo de sesión) a partir de una sentencia select sin utilizar una sentencia create table y especificar cada tipo de columna? Sé que las tablas derivadas son capaces de hacerlo, pero esas son supertemporales (sólo de sesión) y quiero reutilizarlas.

Ahorraría tiempo si no tuviera que escribir un comando create table y mantener la lista de columnas y la lista de tipos emparejadas.

Solución
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)

Del manual que se encuentra en http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Puede utilizar la palabra clave TEMPORARY al crear una tabla. Una tabla TEMPORAL es visible sólo para la sesión actual, y se desaparece automáticamente cuando se cierra la sesión. Esto significa que dos sesiones diferentes pueden utilizar el mismo nombre de tabla temporal sin entrar en conflicto entre sí o con una tabla no TEMPORAL existente del mismo nombre. (La tabla existente se oculta hasta que se elimina la tabla temporal). Para crear tablas temporales, debe tener el privilegio de CREAR TABLAS TEMPORALES.

Comentarios (12)

Utilice esta sintaxis:

CREATE TEMPORARY TABLE t1 (select * from t2);
Comentarios (1)

El motor debe estar antes de la selección:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)
Comentarios (0)