【问题标题】:Merge MySQL tables into one table将 MySQL 表合并为一张表
【发布时间】:2013-09-12 07:17:55
【问题描述】:

我有三个 MySQL 表,每个表只有一列。

第一个表 -> Item_No 有列 item_no

第二个表 -> Item_Name 有列 item_name

第三张表 -> Item_Price 有列 item_price

这三个表包含相互关联的数据。

我想将这三个表合并为一个包含三列的表。

我创建了一个新表 -> Item 有三列 item_no、item_name、item_price。

我想将前三个表中的所有数据移动到新表(Item)中。

【问题讨论】:

  • 如果您的表都只有一列,它们的相关性如何?
  • 通过哪种方法可以证明第二张表中的哪一行属于第一张或第三张表中的行?
  • 我的意思是item_no表的第一行与item_name的第一行和item_price的第一行相关。
  • 你能保证它们过去没有被删除吗?
  • 创建这个数据库结构的人应该踩上乐高积木。

标签: mysql database merge copy


【解决方案1】:

使用您的结构,同一张表上的每个SELECT 语句都可以给出不同的结果,尤其是没有主键的情况下(尽管即使主键也不能保证有序结果)。

您可以做的是给每一行提供一些序数,希望在所有三个表中序数都尊重初始顺序,并通过这些尝试连接表。

【讨论】:

    【解决方案2】:

    我不保证这会奏效,但它可能会解决您的问题。

    SET @rank1 := 0;
    SET @rank2 := 0;
    SET @rank3 := 0;
    
    INSERT INTO new_table (item_no, item_name, item_price)
    SELECT t1.item_no, t2.item_name, t3.item_price
    FROM (SELECT @rank1 := @rank1 + 1 AS rank, item_no
          FROM Item_No) t1
    JOIN (SELECT @rank2 := @rank2 + 1 AS rank, item_name
          FROM Item_Name) t2
    ON t2.rank = t1.rank
    JOIN (SELECT @rank3 := @rank3 + 1 AS rank, item_price
          FROM Item_Price) t3
    ON t3.rank = t1.rank;
    

    如果您未指定ORDER BY 子句,这依赖于数据库按照它们最初插入的顺序返回行。然后,@rankN 变量为每个表生成行号,JOIN 将每个表中的列按此等级排列。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 2016-11-13
      • 1970-01-01
      相关资源
      最近更新 更多