web-dev-qa-db-fra.com

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

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

Cela me ferait gagner du temps si je n'avais pas à écrire une commande create table et à conserver la correspondance entre la liste de colonnes et le type de liste.

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

Extrait du manuel trouvé à l'adresse http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Vous pouvez utiliser le mot clé TEMPORARY lors de la création d'une table. Une table TEMPORARY est uniquement visible pour la session en cours et est supprimée automatiquement lorsque la session est fermée. Cela signifie que deux sessions différentes peuvent utiliser le même nom de table temporaire sans entrer en conflit ou avec une table non TEMPORARY existante portant le 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.

764
psparrow

En plus de la réponse de psparrow si vous avez besoin de ajouter 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
)

Cela fonctionne aussi avec PRIMARY KEY

130
RafaSashi

Utilisez cette syntaxe:

CREATE TEMPORARY TABLE t1 (select * from t2);
62
rizon

Le moteur doit être avant de sélectionner:

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

ENGINE=MEMORY n'est pas pris en charge lorsque la table contient BLOB/TEXT colonnes.

37
Cris