2013-03-14 58 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小提琴對此並不完全有效)。

相關問題