【问题标题】:Select from multiple tables and put them in a temporary table从多个表中选择并将它们放在一个临时表中
【发布时间】:2017-07-18 05:03:43
【问题描述】:

我需要创建一个临时表并将多个表中的数据放入其中。在这个question 中,他们都从一张表中进行选择。如何从多个表中选择? (所有表都有完全相同的列)

编辑: 表没有关系,它们是 9 个表,但它们都有相同的列,如 id、username、password。每个表都包含有关特定用户的信息。

【问题讨论】:

  • 表之间是什么关系?
  • @TimBiegeleisen 他们没有关系。
  • 那么我在这里看到的唯一选择是将表联合在一起,但这只有在它们具有相同的定义时才有意义。
  • 这种问题是设计不佳的症状

标签: mysql


【解决方案1】:

Union可以帮你合并这两个表,然后你就可以使用TEMPORARY的方法了!

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

这会导致两个表中的数据“统一”到一个表中。

所以有两个这样的表:

table1

testCol | testCol2
--------+---------
   A    |     1

table2

testCol | testCol2
--------+---------
   B    |     2

上面的代码会返回

tableTemp

testCol | testCol2
--------+---------
   A    |     1
   B    |     2

希望对你有帮助!

编辑

为了清楚起见,上面的代码只是一个示例!您需要更改变量名称:

CREATE TEMPORARY TABLE IF NOT EXISTS tableTemp AS (SELECT * FROM [[NAME OF FIRST TABLE]] UNION SELECT * FROM [[NAME OF SECOND TABLE]])

既然你说你有 9 个表,你只需要继续为每个表附加一个 UNION SELECT。 例如:

CREATE TEMPORARY TABLE IF NOT EXISTS tableTemp AS (SELECT * FROM [[NAME OF FIRST TABLE]] UNION SELECT * FROM [[NAME OF SECOND TABLE]] UNION SELECT * FROM [[NAME OF THIRD TABLE]] UNION SELECT * FROM [[NAME OF FOURTH TABLE]] UNION SELECT * FROM [[NAME OF FIFTH TABLE]] UNION SELECT * FROM [[NAME OF SIXTH TABLE]] UNION SELECT * FROM [[NAME OF SEVENTH TABLE]] UNION SELECT * FROM [[NAME OF EIGTH TABLE]] UNION SELECT * FROM [[NAME OF NINTH TABLE]])

【讨论】:

  • 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“UNION SELECT * FROM table2)”附近使用正确的语法
  • 嗯,您需要更改您从中选择的表的名称...table2 仅在我的测试中! :)
  • 这看起来应该可以,但看起来你实际上不能直接从联合创建临时表。它返回 @eylay 在 cmets 中报告的错误。此答案提供了解决同一问题的方法:stackoverflow.com/a/31751787/3508398
【解决方案2】:

尝试使用联接和联合。因为你想要临时表别名就可以了。 对于连接,查询将是:

Select column_names from table1 join table2 on column_names

如果你有两个以上的表,你可以使用连接链来获取结果。

查看此链接 https://www.google.co.in/url?sa=t&source=web&rct=j&url=https://www.w3schools.com/sql/sql_join.asp&ved=0ahUKEwim456hiJLVAhUIVbwKHQ9SBzwQFggeMAA&usg=AFQjCNH2uk_VTd4skktAbnIq3dv1MlKD-g

【讨论】:

    【解决方案3】:
    CREATE TABLE IF NOT EXISTS table_3 AS SELECT 1st_table_id as union_id, 1st_table_username as union_username, 1st_table_password as union_password FROM table_1 UNION SELECT 2nd_table_id as union_id, 2nd_table_username as union_username, 2nd_table_password as union_password FROM table_2
    

    根据新表的新列名更改“union_id”、“union_username”和“union_password”。

    【讨论】:

      【解决方案4】:

      这有点晚了,但此处接受的答案中的代码会导致语法错误。

      正如this answer 中所指出的,您不能直接从联合创建表(或临时表)。不过,您可以将联合放在子查询中,如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-24
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 2014-10-24
        相关资源
        最近更新 更多