【问题标题】:Join the same table temporary table in MySQL在MySQL中加入同一张表临时表
【发布时间】:2013-09-16 14:51:27
【问题描述】:

我喜欢在 MySQL 中加入一个失败的临时表,这个想法很简单:

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
)

非常感谢任何帮助。

编辑:mysql抛出的错误是ERROR 1137 (HY000): Can't reopen table: 'temp_table'

【问题讨论】:

    标签: mysql sql join temp-tables


    【解决方案1】:

    您不能在同一个查询中多次引用 TEMPORARY 表。

    请阅读以下链接 http://dev.mysql.com/doc/refman/5.5/en/temporary-table-problems.html

    【讨论】:

    • 感谢您的信息。不幸的是,对于更复杂的情况,这是需要的。
    【解决方案2】:

    这应该可以。只需确保新表的名称与现有表的名称不同即可。

    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】:

    这行得通吗?

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

    这是编写相同查询的一种更简单的方法。

    编辑:

    如果“失败”是指“不返回任何行”,那么您遇到了一个简单的问题。 CREATE TABLE LIKE 不填充表格。它创建一个与any_other_table 具有相同结构但没有行的表。然后你应该用insert 填充它。或者,仅将create tableselect 语句一起使用。

    【讨论】:

      【解决方案4】:

      创建临时表的副本似乎可行,并且可能是一种可行的替代方法:

      CREATE TEMPORARY TABLE t2 LIKE temp_table;
      INSERT INTO t2 SELECT * FROM temp_table;
      
      (
        SELECT p1,p2,p3 FROM temp_table WHERE p4 = 1
      ) UNION (
        SELECT p1,p2,p3 FROM t2 WHERE p4 = 2
      )
      

      【讨论】:

        猜你喜欢
        • 2011-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-04
        • 2019-05-11
        • 1970-01-01
        相关资源
        最近更新 更多