4

我对 SQL 相当陌生,我正在尝试执行以下操作:

我有一列数据我们称之为CATEGORY,列中的数据如下:

杰克, 吉尔, 汤米, 吉尔, 杰基, 保罗, 约翰尼, 是, 好, 泰米, 萨米, 约翰

在第二个表中,我有一个条目映射

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

我需要能够更新 CATEGORY 中的值,Johnny, be, goodjohnny be good仅限于列的那一部分。我尝试了几件事,以下是我的尝试之一:

这里只是试图选择发生这种情况的行

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 回答