2013-03-14 55 views
0

表1:Factor_Name如何合并sql中同一列的行,如下所示?

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 

我要合并的列2个表中,如果因子名称是在表1一样,这是预期的表:

表1:因子名称

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

+0

我对你的例子中发生了什么感到困惑。看起来你只是从你想要的输出中的'FACTOR_NAME'中删除了重复的'NAME'值,然后在'Sample_Info'中重新映射了'FACTOR_ID'?这听起来不像合并两个表格。 – woemler 2013-03-14 15:40:53

回答

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小提琴对此并不完全有效)。

相关问题