Join the same table temporary table in MySQL

守給你的承諾、 提交于 2020-01-03 17:48:27

问题


I like to join a temporary table in MySQL which fails, the idea quite simple:

CREATE TEMPORARY TABLE temp_table LIKE any_other_table; -- srsly it does not matter which table

(
  SELECT p1,p2,p3 FROM temp_table WHERE p4 = 1
) UNION (
  SELECT p1,p2,p3 FROM temp_table WHERE p4 = 2
)

Any help is greatly appreciated.

EDIT: The error thrown by mysql is ERROR 1137 (HY000): Can't reopen table: 'temp_table'


回答1:


You cannot refer to a TEMPORARY table more than once in the same query.

Please read the following link http://dev.mysql.com/doc/refman/5.5/en/temporary-table-problems.html




回答2:


This should work. Just make sure your new table has a different name then the existing one.

CREATE TEMPORARY TABLE new_table

SELECT p1,p2,p3 FROM existing_table WHERE p4 = 1

UNION 

SELECT p1,p2,p3 FROM existing_table WHERE p4 = 2
;



回答3:


Does this work?

SELECT p1, p2, p3
FROM temp_table
WHERE p4 in (1, 2);

It is a much simpler way to write the same query.

EDIT:

If by "fail" you mean "doesn't return any rows", then you have a simple problem. CREATE TABLE LIKE does not populate the table. It creates a table with the same structure as any_other_table, but with no rows. You should then populate it with insert. Or, use create table with the select statement only.



来源:https://stackoverflow.com/questions/18831014/join-the-same-table-temporary-table-in-mysql

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!