更新列中的分号ID - sql

时间:2013-01-25 04:30:07

标签: sql

我一直试图解决这个问题一段时间了。希望有人能在这里帮忙。

我的Article表中有一个分号分隔的CategoryID(例如; 2; 34; 5; 9;),我有一个带有旧CategoryID列和新CategoryID列的Category表。现在,我想使用基于原始CategoryID的一些新的CategoryID更新Article表中的CategoryID。例如(例如; 2; 34; 5; 9;)将更新为(例如; 564; 344; 753; 944;)

我需要这个的原因是因为我正在使用相同的表设置合并来自两个数据库的表。

我知道这是一个糟糕的设计,但它已经很久了。我真的不能想到这个解决方案,任何帮助都会非常感激。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

答案 2 :(得分:0)

你需要一个构建旧版和旧版的脚本/程序。新的CategoryID映射,并浏览您的Article表并通过查找地图来替换它。

也许程序性程序可能会这样做(如果你的DBMS支持类似存储过程/ PLSQL的程序),否则使用Java / C#/ Php

可能更容易实现