1

私はしばらくの間、この問題を理解しようとしてきました。誰かがここで助けてくれることを願っています。

Article テーブル (例: ;2;34;5;9;) にセミコロンで区切られた CategoryID があり、古い CategoryID 列と新しい CategoryID 列を含む Category テーブルがあります。ここで、Article テーブルの CategoryID を、元の CategoryID に基づく新しい CategoryID で更新したいと思います。例 (例 ;2;34;5;9;) は (例 ;564;344;753;944;) に更新されます

これが必要な理由は、同じテーブル設定を持つ 2 つのデータベースのテーブルをマージしているためです。

これが悪い設計であることはわかっていますが、何年もの間このようなものでした。これに対する解決策を本当に考えることはできません。どんな助けでも本当に感謝しています。

4

3 に答える 3

1

はい、デザインが悪いです。

MySQLを使っていると思います。GROUP_CONCAT MySQL の機能を使用しましたが、MSSQL でもエミュレートできます。そして、すべての古い ID を新しい 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 マッピングを構築し、Article テーブルを調べて、マップを検索して置き換えるスクリプト/プログラムが必要です。

たぶん手続き型プログラムでできるかもしれません (DBMS がストアド プロシージャ / PLSQL のような手続き型をサポートしている場合)。それ以外の場合は、Java / C# / Php を使用する方が簡単です。

于 2013-01-25T04:39:58.917 に答える