Can’t reopen table: ‘t1′
I’m quite often jumping between MySQL and SQL Server so remembering the quirks and limitations of each system can be difficult. With MySQL, if you attempt to reference a temporary table more than once in the same query, you will encounter the following error;
Error Code : 1137 Can't reopen table: 't1’
The following provides an example of this…
USE test; CREATE TEMPORARY TABLE test ( Id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ); SELECT * FROM test AS t1 INNER JOIN test AS t2 ON t1.Id = t2.Id; |
It’s not just self-joins that have this issue UNIONS do as well;
SELECT * FROM test AS t1 UNION ALL SELECT * FROM test AS t2; |
There’s a thread over on Stackoverflow discussing this problem. Here’s a solution I commonly use to get around the problem;
USE test; # Create temp table CREATE TEMPORARY TABLE test ( Id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY ); # Insert some test data INSERT INTO test (Id) VALUES (1),(2),(3),(4),(5); # Clone the table. This will do structure & indices but no data. CREATE TEMPORARY TABLE test2 LIKE test; # Insert the data into the new table INSERT INTO test2 SELECT Id FROM test; # Now our queries will work if we use the tables clone SELECT * FROM test AS t1 INNER JOIN test2 AS t2 ON t1.Id = t2.Id; SELECT * FROM test AS t1 UNION ALL SELECT * FROM test2 AS t2; # Clean up DROP TEMPORARY TABLE IF EXISTS test; DROP TEMPORARY TABLE IF EXISTS test2; |















