Créez une table temporaire dans une instruction SELECT sans un CREATE TABLE distinct

Est-il possible de créer une table temporaire (session uniquement) à partir d’une instruction select sans utiliser une instruction create table et en spécifiant chaque type de colonne? Je sais que les tables dérivées sont capables de cela, mais celles-ci sont super temporaires (uniquement pour les instructions) et je veux les réutiliser.

Cela me permettrait de gagner du temps si je n’avais pas à écrire une commande de création de table et à conserver la liste des colonnes et la liste de types correspondantes.

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

Extrait du manuel disponible à l’ adresse http://dev.mysql.com/doc/refman/5.7/fr/create-table.html

Vous pouvez utiliser le mot clé TEMPORARY lors de la création d’une table. Une table TEMPORARY est visible uniquement pour la session en cours et est automatiquement supprimée à la fermeture de la session. Cela signifie que deux sessions différentes peuvent utiliser le même nom de table temporaire sans entrer en conflit les unes avec les autres ou avec une table non TEMPORARY existante du même nom. (La table existante est masquée jusqu’à ce que la table temporaire soit supprimée.) Pour créer des tables temporaires, vous devez disposer du privilège CREATE TEMPORARY TABLES.

En plus de la réponse de psparrow si vous devez append un index à votre table temporaire, procédez comme suit :

 CREATE TEMPORARY TABLE IF NOT EXISTS temp_table ( INDEX(col_2) ) ENGINE=MyISAM AS ( SELECT col_1, coll_2, coll_3 FROM mytable ) 

Il fonctionne également avec la PRIMARY KEY

Utilisez cette syntaxe:

 CREATE TEMPORARY TABLE t1 (select * from t2); 

Le moteur doit être avant select:

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

ENGINE=MEMORY n’est pas supporté lorsque le tableau contient des colonnes BLOB / TEXT