Создать временную таблицу в операторе SELECT без отдельной CREATE TABLE - PullRequest
475 голосов
/ 02 мая 2011

Можно ли создать временную (только для сеанса) таблицу из оператора выбора без использования оператора создания таблицы и указания каждого типа столбца? Я знаю, что производные таблицы способны на это, но они являются временными (только для операторов), и я хочу использовать их повторно.

Это сэкономило бы время, если бы мне не нужно было писать команду создания таблицы и сопоставлять список столбцов и список типов.

Ответы [ 5 ]

758 голосов
/ 02 мая 2011
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, таблицей с одним и тем же именем. (Существующая таблица скрыта до тех пор, пока временная таблица не будет удалена.) Для создания временных таблиц у вас должна быть привилегия CREATE TEMPORARY TABLES.

130 голосов
/ 17 июня 2013

В дополнение к ответу 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

62 голосов
/ 07 декабря 2012

Используйте этот синтаксис:

CREATE TEMPORARY TABLE t1 (select * from t2);
53 голосов
/ 14 февраля 2013

Двигатель должен быть до выбора:

CREATE TEMPORARY TABLE temp1 ENGINE=MEMORY 
as (select * from table1)
37 голосов
/ 23 февраля 2013

ENGINE=MEMORY не поддерживается, если таблица содержит BLOB / TEXT столбцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...