【问题标题】:SQL Server update column with value from another columnSQL Server 使用另一列的值更新列
【发布时间】:2017-12-05 02:54:51
【问题描述】:

我有两个 SQL 表:

用户

  • UserId (nvarchar)
  • Tags (nvarchar)

简介

  • UserId (nvarchar)
  • Tags (nvarchar)

例子:

用户表:

UserId      Tags
----------------------------------
1           tag1,tag2,tag3,tag4
2           tag1,tag2
3           tag1
4           tag2,tag3,tag4

Profile 表标签之后应该是

个人资料表:

UserId      Tags
-------------------------------------
1           ["tag1","tag2","tag3","tag4"]
2           ["tag1","tag2"]
3           ["tag1"]
4           ["tag2","tag3","tag4"]

目前用户标签存储在Tags 列中的User 表中,如下所示,用逗号分隔:tag1,tag2,tag3,tag4。还可以列出一个标签:tag1(不存在逗号)。

我需要以以下格式(字符串数组)“移动/复制”配置文件表标签列中的这些标签:["tag1","tag2","tag3","tag4"]

所以基本上在我下面的更新语句中,第二行:SET Profile.Tags = UA.TAGS, UA.TAGS 值应该被转换成一个字符串数组。

UPDATE Profile
SET Profile.Tags = UA.TAGS (UA.TAGS value should be an array) 
FROM Profile UP INNER JOIN User UA ON UP.UserId = UA.UserId

有什么想法可以实现吗?

【问题讨论】:

  • 您应该永远在单个列中存储多个值 - 这甚至违反了数据库设计的第一范式。由于您使用的是关系数据库 - 使用它的relational 功能 - 为标签定义一个单独的表Tags,并在两个@ 之间定义一个“链接”表987654336@ 和Tags,或ProfileTags ...

标签: sql sql-server tsql


【解决方案1】:
UPDATE Profile
SET Profile.Tags = '["'+ REPLACE(UA.TAGS,',','","') + '"]'
FROM Profile UP
INNER JOIN User UA
on UP.UserId = UA.UserId

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2015-06-04
    • 2014-11-25
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多