Создайте временную таблицу в операторе SELECT без отдельной таблицы создания

StackOverflow https://stackoverflow.com/questions/5859391

Вопрос

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

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

Это было полезно?

Решение

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

Из руководства, найденного в http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Вы можете использовать временное ключевое слово при создании таблицы. Временная таблица видимо только текущего сеанса, и является упал автоматически Когда сеанс закрыт. Это означает, что две разные сеансы могут использовать одно и то же временное имя таблицы без противоречия друг с другом или с существующей невременной таблицей с тем же именем. (Существующая таблица скрыта до тех пор, пока временная таблица не будет отброшена.) Чтобы создать временные таблицы, у вас должна быть привилегия создания временных таблиц.

Другие советы

В дополнение к Psparrow's Ответ, если вам нужно Добавьте индекс во временном столе:

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

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

CREATE TEMPORARY TABLE t1 (select * from t2);

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

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

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

CREATE TEMPORARY TABLE IF NOT EXISTS to_table_name AS (SELECT * FROM from_table_name)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top