【问题标题】:how to merge rows with the same column in sql like this?如何像这样在sql中合并具有同一列的行?
【发布时间】:2013-03-03 01:22:38
【问题描述】:

表 1:Factor_Name

ID NAME
1  A
2  A
3  B

表 2:Sample_Info

   ID   FACTOR_ID   INFO
   1    1           Sample_A
   2    2           Sample_B
   3    3           Sample_C

如果table1中的因子名称相同,我想合并2个表中的列,这是预期的表:

表 1:Factor_Name

ID NAME
1  A
2  B

表 2:Sample_Info

   ID   FACTOR_ID   INFO
   1    1           Sample_A
   2    1           Sample_B
   3    2           Sample_C

如何在 mysql 中做到这一点?

【问题讨论】:

  • 我对您的示例中发生的事情有些困惑。看起来您刚刚从所需输出中的FACTOR_NAME 中删除了重复的NAME 值,然后在Sample_Info 中重新映射了FACTOR_ID?这听起来不像是合并两个表。

标签: mysql sql database


【解决方案1】:

您需要首先复制您当前拥有的表来执行此操作:

CREATE TEMPORARY TABLE Factor_Name_Temp as (SELECT * 
                                            FROM Factor_Name) 

CREATE TEMPORARY TABLE Sample_Info_Temp as (SELECT * 
                                            FROM Sample_Info) 

然后,您需要清除现有表的内容。您似乎还想重置 id 列。这可能有点危险,具体取决于有多少 other 表引用这些值。但不管怎样……

然后,将“临时”表中的数据插入到原始表中。如果您要重新生成它们,请不要使用 id 列,否则这将选择初始的“最小”值(即,会有间隙)。

INSERT Factor_Name (id, name) 
SELECT MIN(id), name
FROM Factor_Name_Temp
GROUP BY name

INSERT Sample_Info (id, factor_id, info)
SELECT Sample_Info_Temp.id, Factor_Name.id, Sample_Info_Temp.info
FROM Sample_Info_Temp
JOIN Factor_Name_Temp
  ON Factor_Name_Temp.id = Sample_Info_Temp.factor_id
JOIN Factor_Name
  ON Factor_Name.name = Factor_Name_Temp.name

别忘了自己打扫卫生!

(未经测试的声明 - 我缺少一个 mySQL 实例,而 SQL Fiddle 并不完全适用于此)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2017-01-08
    • 2016-03-22
    • 2021-04-26
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多