如何在sql中将行与同一列合并?

时间:2013-03-14 15:35:05

标签: mysql sql database

表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

如果表1中的因子名称相同,我想合并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中做到这一点?

1 个答案:

答案 0 :(得分:0)

首先要复制你目前拥有的表格,你会想要这样做:

CREATE TEMPORARY TABLE Factor_Name_Temp as (SELECT * 
                                            FROM Factor_Name) 

CREATE TEMPORARY TABLE Sample_Info_Temp as (SELECT * 
                                            FROM Sample_Info) 

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

然后,将'temp'表中的数据插回到原始表中。如果你重新生成它们,请不要使用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对此并不完全具有导电性)。