2013-01-25 37 views
1

我一直在努力,現在推測這個問題了一會兒。希望任何人都可以在這裏幫忙。更新分號分隔的編號在列 - SQL

我在我的文章表(例如; 2; 34; 5; 9;)中有一個以分號分隔的CategoryID,並且我有一個帶有舊的CategoryID列和新的CategoryID列的Category表。現在我想根據原始的CategoryID更新Article表中的CategoryID並添加一些新的CategoryID。例如(例如; 2; 34; 5; 9;)將被更新爲(例如; 564; 344; 753; 944;)

我需要這個的原因是因爲我正在合併來自兩個數據庫同樣的桌子設置。

我知道這是一個不好的設計,但它一直像這樣的年齡。我無法真正想到這個解決方案,任何幫助將非常感激。

+0

它是SQL Server的? – bonCodigo

+0

你應該正常化您的數據 – cha

+2

這是當「它太麻煩」來創建一個關係表,在文章和類別之間的這種情況下,一個很好的例子。根據我的經驗,這種節省時間的Q.D.F.如果剛剛完成「正確」的話,就會耗費更多的時間。 –

回答

1

是的,這是一個不好的設計。

我想你使用MySQL。我已經使用GROUP_CONCAT MySQL功能,但you can emulate it in MSSQL also。我想你需要用新的東西來替換所有舊的ID。

SQLFiddle demo

表:

create table article(id int, CategoryID varchar(200)); 
create table Category(OldCategoryId int, newCategoryId int); 

和更新替換組:

update article, 
(select 
    article.id, 
    CONCAT(';', 
     GROUP_CONCAT(cast(newCategoryID as char) separator ';'), 
     ';') newGroups 
from category 
left join article on CategoryId like CONCAT('%;',CAST(oldCategoryId as char),';%') 
group by article.id) t1 
SET article.CategoryId=t1.newGroups 
where article.id=t1.id 
0

你需要一個腳本/程序,構建老&新的類別ID映射,並通過你的文章表並通過查找地圖替換它。

也許程序程序可能會做(如果你的DBMS支持過程就像存儲過程/ PLSQL),否則可能更容易做到這一點使用Java/C#/ PHP的