Buat tabel sementara dalam pernyataan SELECT tanpa CREATE TABLE yang terpisah


494

Apakah mungkin untuk membuat tabel sementara (hanya sesi) dari pernyataan pilih tanpa menggunakan membuat tabel pernyataan dan menentukan setiap jenis kolom? Saya tahu tabel turunan mampu melakukan ini, tetapi tabel itu super-temporer (hanya pernyataan) dan saya ingin menggunakan kembali.

Ini akan menghemat waktu jika saya tidak harus menulis perintah buat tabel dan menjaga daftar kolom dan daftar jenis dicocokkan.

Jawaban:


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

Dari manual yang ditemukan di http://dev.mysql.com/doc/refman/5.7/en/create-table.html

Anda dapat menggunakan kata kunci SEMENTARA saat membuat tabel. Tabel TEMPORARY hanya terlihat oleh sesi saat ini , dan dijatuhkan secara otomatis ketika sesi ditutup. Ini berarti bahwa dua sesi yang berbeda dapat menggunakan nama tabel sementara yang sama tanpa saling bertentangan atau dengan tabel non-TEMPORARY yang ada dengan nama yang sama. (Tabel yang ada disembunyikan sampai tabel sementara dijatuhkan.) Untuk membuat tabel sementara, Anda harus memiliki hak istimewa CREATE TEMPORARY TABLES.


8
Sempurna! Kolom dengan maksimum panjang maksimal dan semuanya! Saya menambahkan kata temporarybegitu create temporary table mytable as select ....
Lapangan Bryan

5
@ imperium2335, Mungkin Anda harus mencoba berikut: create table t as select ... limit 0; alter table t engine=memory; insert into t select .... Atau, mungkin Anda dapat mengubah "mesin default tabel baru". Saya membayangkan ini bisa dilakukan dalam variabel tingkat sesi. Lebih baik lagi, gunakan tombol Tanya Pertanyaan di kanan atas.
Lapangan Bryan

10
Tidak perlu mengetahui tentang nama dan tipe kolom, yang merupakan alasan penanya untuk menghindari penggunaan Buat Tabel.
psparrow

30
Anda dapat menggunakannya seperti ini CREATE TEMPORARY TABLE IF NOT EXISTS table2 LIKE table1jika Anda tidak ingin menyalin data, hanya struktur
dzona

1
apa yang Anda maksud dengan sesi?
Saurabh Chandra Patel

137

Selain jawaban psparrow jika Anda perlu menambahkan indeks ke tabel sementara Anda lakukan:

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

Ini juga berfungsi dengan baik PRIMARY KEY


3
Bisakah Engine = Memori digunakan juga dengan sintaksis seperti itu?
DarkSide

6
@DarkSide Ya ENGINE = MEMORY juga bisa digunakan. Lihat contoh berikut: blog.cnizz.com/2010/11/24/...
RafaSashi

1
apa perbedaan antara MyISAM dan mesin Memori? apa manfaat dari memori?
yeahman


54

Engine harus sebelum pilih:

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

39

ENGINE=MEMORYtidak didukung ketika tabel berisi BLOB/ TEXTkolom


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.