Criar uma tabela temporária numa instrução de selecção sem uma tabela de criação separada

é possível criar uma tabela temporária (apenas sessão) a partir de uma instrução select sem usar uma instrução create table e especificando cada tipo de coluna? Eu sei que tabelas derivadas são capazes disso, mas essas são super-temporárias (apenas declaração) e eu quero reutilizar.

pouparia tempo se não tivesse de escrever um comando de tabela criar e manter a lista de colunas e a lista de tipos correspondentes.

Author: einpoklum, 2011-05-02

5 answers

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

Do manual encontrado em http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Pode usar a palavra-chave temporária ao criar uma tabela. Uma tabela temporária é visível apenas para a sessão actual, e é largada automaticamente Quando a sessão é fechada. Isto significa que duas sessões diferentes podem usar o mesmo nome temporário da tabela sem entrar em conflito entre si ou com uma tabela não-temporária existente com o mesmo nome. (A a tabela existente está escondida até que a tabela temporária seja retirada.) Para criar tabelas temporárias, você deve ter o privilégio criar tabelas temporárias.

 709
Author: psparrow, 2016-02-04 10:30:37

Para além da resposta de psparrow Se precisar de adicionar um índice à sua tabela temporária, Faça:

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

Também funciona com PRIMARY KEY

 121
Author: RafaSashi, 2013-07-13 11:09:56

Use esta sintaxe:

CREATE TEMPORARY TABLE t1 (select * from t2);
 56
Author: rizon, 2015-04-21 07:10:53

O motor tem de ser antes de seleccionar:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)
 53
Author: Crusader, 2013-02-14 14:02:25

ENGINE=MEMORY não é suportado quando a tabela contém BLOB/TEXT colunas

 33
Author: Cris, 2015-04-21 07:11:55