Creare una tabella temporanea in un’istruzione SELECT senza una TABELLA CREATA separata

È ansible creare una tabella temporanea (solo sessione) da un’istruzione select senza utilizzare un’istruzione create table e specificando ogni tipo di colonna? So che le tabelle derivate sono in grado di farlo, ma quelle sono super-temporanee (solo istruzione) e voglio riutilizzarle.

Risparmierebbe tempo se non dovessi scrivere un comando create table e mantenere l’elenco delle colonne e la lista dei tipi abbinati.

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

Dal manuale trovato su http://dev.mysql.com/doc/refman/5.7/en/create-table.html

È ansible utilizzare la parola chiave TEMPORARY durante la creazione di una tabella. Una tabella TEMPORARY è visibile solo alla sessione corrente e viene rilasciata automaticamente quando la sessione viene chiusa. Ciò significa che due sessioni diverse possono utilizzare lo stesso nome di tabella temporaneo senza conflitto tra loro o con una tabella non TEMPORANEA esistente con lo stesso nome. (La tabella esistente è nascosta fino a quando la tabella temporanea non viene rilasciata.) Per creare tabelle temporanee, è necessario disporre del privilegio CREATE TEMPORARY TABLES.

Oltre alla risposta di psparrow se è necessario aggiungere un indice alla tabella temporanea, procedere come segue:

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

Funziona anche con PRIMARY KEY

Usa questa syntax:

 CREATE TEMPORARY TABLE t1 (select * from t2); 

Il motore deve essere selezionato prima:

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

ENGINE=MEMORY non è supportato quando la tabella contiene colonne BLOB / TEXT