我对SQL很新,我正在尝试执行以下操作:
我有一列数据我们称之为CATEGORY,列中的数据如下:
jack,gill,tommy,jill,jacky,paul,johnny,be,good,tammy,sammy, 约翰
在第二个表中,我有一个条目的映射
第1列Johnny, be, good
- 第2列johnny be good
我需要能够将Johnny, be, good
的CATEGORY值更新为johnny 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]
提前感谢您的帮助。
答案 0 :(得分:1)
假设您使用的是MSSQL,请尝试使用
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
<强> Results 强>:
| 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 |