2012-08-25 19 views
17

Ben geçici bir tablo oluşturma Aşağıdaki basit test-çalıştırmak için çalışıyor ve sonra iki farklı seçimleri UNIONing ediyorum:Geçici bir tabloda TÜMÜNÜ BIR DEĞİL misiniz?

CREATE TEMPORARY TABLE tmp 
SELECT * FROM people; 

SELECT * FROM tmp 
UNION ALL 
SELECT * FROM tmp; 

Ama olsun bir #1137 - Can't reopen table: 'tmp'

Ben geçici tablolar oturumu son sanıyordum . Sorun nedir burada?

TEMPORARY Table Problems altında belgelendiği gibi
+1

olası yinelenen (http://stackoverflow.com/questions/343402/getting-around-mysql-cant-reopen-table-error) – LittleBobbyTables

+1

@ LittleBobby- Kullanabileceğiniz herhangi bir geçerli çözüm görmüyor musunuz? – Yarin

+0

kaç farklı geçici tablo kullanmanız gerekir ..? – heretolearn

cevap

14

Bu hata MySQL tabloları geçici tablolar yöneten hangi yolu sırayla katılır, sendikalar yanı sıra alt sorgular etkileyen değiştirildiğini gösterir. Aşağıdaki çözümü deneyin, tablo tekrar açamazsınız mysql hatayı düzeltmek için: Bundan sonra

mysql> CREATE TEMPORARY TABLE tmp_journals_2 LIKE tmp_journals; 

Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO tmp_journals_2 SELECT * FROM tmp_journals; 

Birleştiğinizi işlemini gerçekleştirebilir.

+1

Bu çalışır, ancak geçici tabloları çoğaltma kaynaktan 2 oluşturmaktan daha iyi olmaz mı? – Yarin

+0

Geçerli istemci oturumu sonlandırıldığında geçici tablo silinir. Http://www.tutorialspoint.com/mysql/mysql-temporary-tables.htm – heretolearn

+0

İyi bir [cevap] (http: //) ile geldim stackoverflow.com/a/12122220/165673) buna dayanarak - bana doğru yönde yönlendirdiğin için teşekkürler – Yarin

6

:

Aynı sorguda bir kereden fazla TEMPORARY tabloya bakın olamaz. Örneğin, aşağıdaki çalışmıyor: Farklı takma adlar altında saklanan fonksiyonunda geçici tabloya birden çok kez tavsiye edersem

mysql> SELECT * FROM temp_table, temp_table AS t2; 
ERROR 1137: Can't reopen table: 'temp_table'

Bu hata referanslar fonksiyonu içinde farklı tablolara gerçekleşmiş olsa bile oluşur.

+7

GERÇEKTEN Mİ? Bu sadece onların kullanışlılığının% 90'ını uçuruyor gibi görünüyor. Bariz bir çözümü kaçırıyor muyum? – Yarin

+0

Onlara farklı bir sorguda erişebilirsiniz ... –

+0

Sam- bu durumda nasıl yaparsınız? – Yarin

6

http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html

http://www.mysqlrepair.org/mysqlrepair/cant-reopen-table.php

  1. boş geçici tablo
  2. biz UNION istiyoruz sonuçlarını yerleştirin oluştur olurdu bu durumda çözeltinin cevaplayan sshekar's sayesinde bunu çözdü tabloya ayrı ayrı
  3. Temp tablosunu sorgula

SQL:

CREATE TEMPORARY TABLE tmp LIKE people; 

INSERT INTO tmp SELECT * FROM people; /* First half of UNION */ 
INSERT INTO tmp SELECT * FROM people; /* Second half of UNION */ 
SELECT * FROM tmp; 

(Bkz Using MySQL Temporary Tables to save your brain) [hata "tablosunu yeniden Can not" MySQL Gezinme] arasında

+3

Veya sadece '' CREATE GEÇİCİ MASA tmp SEÇİMİ * BİRLİKTEN BİRLİKTE TÜM SEÇİMİ * insanlardan? – eggyal

İlgili konular