1

我一直在尝试解决这个问题一段时间。希望任何人都可以在这里提供帮助。

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

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

我知道这是一个糟糕的设计,但多年来一直如此。我真的想不出一个解决方案,任何帮助将不胜感激。

4

3 回答 3

1

是的,这是一个糟糕的设计。

我想你使用 MySQL。我使用了GROUP_CONCAT MySQL 特色功能,但您也可以在 MSSQL 中模拟它。我想你需要用新的替换所有旧的 ID。

SQLFiddle 演示

表:

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
于 2013-01-25T06:46:47.083 回答
0

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

也许过程程序可能会这样做(如果您的 DBMS 支持存储过程 / PLSQL 之类的过程),否则使用 Java / C# / Php 可能更容易做到这一点

于 2013-01-25T04:39:58.917 回答