0

表 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中做到这一点?

4

1 回答 1

0

您将希望通过首先复制您当前拥有的表来执行此操作:

CREATE TEMPORARY TABLE Factor_Name_Temp as (SELECT * 
                                            FROM Factor_Name) 

CREATE TEMPORARY TABLE Sample_Info_Temp as (SELECT * 
                                            FROM Sample_Info) 

然后,您将需要清除现有表的内容。您似乎还想重置 id 列。这可能有点危险,具体取决于有多少其他表引用这些值。但是无论哪种方式...

然后,将“临时”表中的数据插入到原始表中。如果您要重新生成它们,请不要使用 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 并不完全适用于此)。

于 2013-03-14T15:55:18.487 回答