572 Stimmen

Erstellen einer temporären Tabelle in einer SELECT-Anweisung ohne ein separates CREATE TABLE

Ist es möglich, eine temporäre Tabelle (nur Sitzung) aus einer select-Anweisung zu erstellen, ohne eine create table-Anweisung zu verwenden und jeden Spaltentyp anzugeben? Ich weiß, dass abgeleitete Tabellen dazu in der Lage sind, aber diese sind sehr temporär (nur Anweisung) und ich möchte sie wiederverwenden.

Es würde Zeit sparen, wenn ich nicht einen Befehl zum Erstellen einer Tabelle schreiben und die Spaltenliste und die Typenliste aufeinander abstimmen müsste.

903voto

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

Aus dem Handbuch, zu finden unter http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Sie können das Schlüsselwort TEMPORARY verwenden, wenn Sie eine Tabelle erstellen. Eine TEMPORARY-Tabelle ist nur für die aktuelle Sitzung sichtbar und ist automatisch gelöscht wenn die Sitzung beendet ist. Das bedeutet, dass zwei verschiedene Sitzungen denselben temporären Tabellennamen verwenden können, ohne dass es zu Konflikten untereinander oder mit einer bestehenden nicht TEMPORÄREN Tabelle desselben Namens kommt. (Die vorhandene Tabelle wird ausgeblendet, bis die temporäre Tabelle gelöscht wird.) Um temporäre Tabellen zu erstellen, müssen Sie über das Recht CREATE TEMPORARY TABLES verfügen.

157voto

RafaSashi Punkte 15272

Zusätzlich zu psparrow's antworten, wenn Sie es müssen einen Index hinzufügen zu Ihrer temporären Tabelle machen:

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

Es funktioniert auch mit PRIMARY KEY

68voto

rizon Punkte 7961

Verwenden Sie diese Syntax:

CREATE TEMPORARY TABLE t1 (select * from t2);

58voto

Crusader Punkte 1144

Der Motor muss vor der Auswahl stehen:

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

44voto

Cris Punkte 2403

ENGINE=MEMORY wird nicht unterstützt, wenn die Tabelle BLOB / TEXT Spalten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X