web-dev-qa-db-ja.com

別のCREATE TABLEを使用せずにSELECTステートメントで一時テーブルを作成する

Create tableステートメントを使用せずに各列タイプを指定せずに、selectステートメントから一時(セッションのみ)テーブルを作成することは可能ですか?派生テーブルでこれが可能であることを私は知っていますが、それらは超一時的(ステートメントのみ)であり、再利用したいのです。

テーブル作成コマンドを作成し、列リストと型リストを一致させておく必要がなければ、時間を節約できます。

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

http://dev.mysql.com/doc/refman/5.7/en/create-table.htmlにあるマニュアルから

テーブルを作成するときにTEMPORARYキーワードを使用できます。 TEMPORARYテーブルは 現在のセッションからしか見えない で、セッションが閉じられると 自動的に削除されます です。これは、2つの異なるセッションが互いに、または同じ名前の既存の非TEMPORARYテーブルと競合することなく、同じ一時テーブル名を使用できることを意味します。 (一時表がドロップされるまで、既存の表は非表示になります。)一時表を作成するには、CREATE TEMPORARY TABLES特権が必要です。

746
psparrow

psparrowの に加えて、 インデックスを追加する必要がある場合は あなたの一時テーブルに/を追加します。

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

PRIMARY KEYでも動作します

130
RafaSashi

この構文を使用してください。

CREATE TEMPORARY TABLE t1 (select * from t2);
60
rizon

エンジンを選択する前にする必要があります。

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

テーブルにBLOB/TEXT列が含まれる場合、ENGINE=MEMORYはサポートされません

37
Cris