4

私はSQLにかなり慣れていないので、次の操作を実行しようとしています:

CATEGORYと呼ぶデータの列があります。列のデータは次のとおりです。

ジャック、ギル、トミー、ジル、ジャッキー、ポール、ジョニー、ビー、グッド、タミー、サミー、ジョン

2番目のテーブルには、エントリのマッピングがあります

列 1 Johnny, be, good- 列 2johnny be good

Johnny, be, goodCATEGORY の値を更新できる必要がありますjohnny be goodが、列のその部分のみです。私はいくつかのことを試しましたが、以下は私の試みの1つです:

ここでは、これが発生する行を選択しようとしました

SELECT * FROM [dbo].[TD_DTV_BV_CATALOGITEMS] a
INNER JOIN
[dbo].[TD_CATEGORYMAP] b ON
a.[COURSE_CATEGORY] LIKE  b.[GROUPCATEGORY]

ここで列を更新しようとしましたが、もちろん無効です。

UPDATE [dbo].[TD_DTV_BV_CATALOGITEMS] a
SET a.COURSE_CATEGORY = REPLACE(a.COURSE_CATEGORY, b.MAPCATEGORY)
INNER JOIN
[dbo].[TD_CATEGORYMAP] b ON
a.[COURSE_CATEGORY] LIKE b.[GROUPCATEGORY]

助けてくれてありがとう。

4

1 に答える 1

1

あなたがMSSQLを使用していると仮定して、これを試してください

SQL フィドル

MS SQL Server 2008 スキーマのセットアップ:

create table t ( 
  id int not null identity(1, 1), 
  category varchar(max)
  )

create table map (
  col1 varchar(max), col2 varchar(max)
  )

insert t (category)
values ('jack, gill, tommy, jill, jacky, paul, Johnny, be, good, tammy, sammy, john'),
  ('jack, gill, tommy, jill, jacky, paul, Johnny, be, good'),
  ('Johnny, be, good, tammy, sammy, john')

insert map (col1, col2)
values ('Johnny, be, good', 'johnny be good')

クエリ 1 :

update t set
  category = replace(category, m.col1, m.col2)
from t
  join map m on t.category like m.col1 + '%' --in the begining
    or t.category like '%, ' + m.col1 + ',%' --in the middle
    or t.category like '%, ' + m.col1        --in the end

select * from t

結果

| ID |                                                                 CATEGORY |
---------------------------------------------------------------------------------
|  1 | jack, gill, tommy, jill, jacky, paul, johnny be good, tammy, sammy, john |
|  2 |                     jack, gill, tommy, jill, jacky, paul, johnny be good |
|  3 |                                       johnny be good, tammy, sammy, john |
于 2013-04-27T02:12:47.053 に答える