2010-05-06 213 views
0

我正在從一個可怕的設計數據庫進行一些數據遷移到一個不太可怕的設計數據庫。有一個多對多的關係,其中一個表中的主鍵與另一個表中的逗號分隔列表相對應。從逗號分隔列表到單個項目結果集。 * mysql

FK_ID | data 
------------- 
1,2 | foo 
3  | bar 
1,3,2 | blarg 

有一種方法,以輸出與每個逗號分隔元件的FK_ID字段作爲結果單行設置?

result set 
FK_ID | data 
------------- 
1  | foo 
2  | foo 
3  | bar 
1  | blarg 
2  | blarg 
3  | blarg 

我想這會需要某種遞歸查詢,我不認爲MySQL有。

在此先感謝。

回答

0

對我來說,最簡單的方法是編寫一個查詢源表並將記錄插入到目標表中的腳本。

僞代碼:

query = "select * from sourcetable"; 
get a reader object; 
while reading() 
{ 
    orig_FK = reader(FK_ID); 
    orig_data = reader(data); 
    orig_FK_array = orig_FK split by comma 
    foreach(ID in orig_FK_array) 
    { 
     query = "insert into targettable (ID, data) values (@ID, @Data);"; 
     add parameters; 
     execute query; 
    } 
} 
0

如果你有一個數字/帳簿桌,這是整數的順序列表的表,你可以做一個單一的查詢。

Select Substring(T.FK_ID 
    , N.Value 
    , CharIndex(',', T.FK_ID + ',', N.Value) - N.Value) 
    , T.Data 
From Numbers As N 
Cross Join Table As T 
Where N.Value <= Len(T.FK_ID) 
And Substring(',' + T.FK_ID, N.Value, 1) = ','