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.
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.
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
Use esta sintaxe:
CREATE TEMPORARY TABLE t1 (select * from t2);
O motor tem de ser antes de seleccionar:
CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY
as (select * from table1)
ENGINE=MEMORY
não é suportado quando a tabela contém BLOB
/TEXT
colunas