È 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