mysql - 如何将两个以上的表合并成一个id自增的新表?

标签 mysql database union

在我的数据库中,我有三个不同的表。我的表看起来相似,但具有不同的表名称,并且结构如下:

Table_One
    +------+----+
    |id|JAN||FEB|
    +------+----+
    |1 |  1||  5|
    +------+----+
    |2 |  8|| 12|
    +------+----+
    |3 | 15|| 19|
    +------+----+
    |4 | 22|| 26|
    +------+----+

Table_Two
    +------+----+
    |id|JAN||FEB|
    +------+----+
    |1 |  1||  5|
    +------+----+
    |2 |  8|| 12|
    +------+----+
    |3 | 15|| 19|
    +------+----+
    |4 | 22|| 26|
    +------+----+

Table_Three
    +------+----+
    |id|JAN||FEB|
    +------+----+
    |1 |  1||  5|
    +------+----+
    |2 |  8|| 12|
    +------+----+
    |3 | 15|| 19|
    +------+----+
    |4 | 22|| 26|
    +------+----+

现在我想通过将所有三个表合并在一起来创建新表,其结构应类似于以下结构。

Table_Final
        +------+----+
        |id |JAN|FEB|
        +------+----+
        |1  |  1|  5|
        +------+----+
        |2  |  8| 12|
        +------+----+
        |3  | 15| 19|
        +------+----+
        |4  | 22| 26|
        +------+----+
        |5  |  1|  5|
        +------+----+
        |6  |  8| 12|
        +------+----+
        |7  | 15| 19|
        +------+----+
        |8  | 22| 26|
        +------+----+
        |9  |  1|  5|
        +------+----+
        |10 |  8| 12|
        +------+----+
        |11 | 15| 19|
        +------+----+
        |12 | 22| 26|
        +------+----+

我尝试了几次通过 UNION 操作将表合并在一起。但问题是,使用 UNION 操作创建新表后,新表不会创建 auto_increment id,因此,我没有获得任何更新、删除新表数据中选项的权限。

最佳答案

使用 MySQL 的用户变量,这也是可能的,无需使用额外的表
但是这个查询将始终确保相同的 id,因为没有 ORDER BY..

SELECT
   (@id := @id + 1) AS id   
 , JAN
 , FEB
FROM (

  SELECT

     JAN
   , FEB

  FROM (
    SELECT
       id 
     , JAN
     , FEB
     , 1 AS position
    FROM
     Table_One  

    UNION ALL 

    SELECT 
       id 
     , JAN
     , FEB
     , 2 AS position
    FROM
     Table_Two

    UNION ALL 

    SELECT 
       id 
     , JAN
     , FEB
     , 3 AS position
    FROM
     Table_Three

  ) AS Tables
  CROSS JOIN ( SELECT @id := 0 ) AS init_user_param
  ORDER BY 
     position ASC
   , id ASC
) AS Tables_user_param

关于mysql - 如何将两个以上的表合并成一个id自增的新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50007167/

相关文章:

sql - 手动排序 concat 文本(不是 ASC 或 DESC)

mysql - 如果主键与第三个表匹配并按第三个表排序,我将如何连接两个表?

php - 删除数据后重新整理数据库中的id字段

sql - 如何在 sql server 2005 中使用查询终止/取消数据库备份操作?

sql - 按日期分组多个表

database - 如何从数据集中制作训练集和测试集?

php - 使用 API 中的新数据更新表

mysql - 是什么导致 RDS 上的 MySQL 每 5 分钟出现一次 CPU 峰值?

不存在的 MySQL

php - 向表中添加外键 ID