Créer une table temporaire dans une déclaration SELECT sans créer une TABLE séparée
est-il possible de créer une table temporaire (session seulement) à partir d'une instruction select sans utiliser une instruction create table et en spécifiant chaque type de colonne? Je sais que les tableaux dérivés sont capables de cela, mais ceux-ci sont super-temporaire (déclaration-seulement) et je veux réutiliser.
ce serait gagner du temps si je n'avais pas à écrire une commande Créer une table et garder la liste de colonne et la liste de type appariés.
5 réponses
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT * FROM table1)
du manuel trouvé à http://dev.mysql.com/doc/refman/5.7/en/create-table.html
vous pouvez utiliser le mot-clé temporaire lors de la création d'une table. Un tableau temporaire est visible uniquement pour la session en cours , et est automatiquement abandonné lorsque la session est fermée. Cela signifie que deux sessions différentes peuvent utiliser le même nom de table temporaire sans en conflit les uns avec les autres ou avec une table non temporaire existante du même nom. (La table existante est cachée jusqu'à ce que la table temporaire soit abandonnée.) Pour créer des tables temporaires, vous devez avoir le privilège créer des TABLES temporaires.
en plus de psparrow's réponse si vous avez besoin de ajouter un index à votre table temporaire faire:
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 aussi avec PRIMARY KEY
utilisez cette syntaxe:
CREATE TEMPORARY TABLE t1 (select * from t2);
moteur doit être avant select:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
n'est pas pris en charge lors de la table contient BLOB
/ TEXT
colonnes