使用存储在另一个SQL表中的值更新列中的部分数据

时间:2013-04-26 20:35:35

标签: sql

我对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]

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

假设您使用的是MSSQL,请尝试使用

SQL Fiddle

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 |