替换和删除SQL Server数据库中的列值

时间:2017-11-22 16:36:44

标签: sql sql-server-2012

我有一个包含用户ID和课程ID的表。决定一些课程实际上是重复的,我需要摆脱它们。所以,这意味着我必须用另一个替换其中一个课程ID,但要确保没有重复。

以下是一个例子:

UserID    CourseID
------    --------
1         1
1         2
1         3
1         4
2         1
2         2

他们认为课程ID和3是相同的,所以需要摆脱1并替换为3并最终得到:

UserID    CourseID
------    --------
1         2
1         3
1         4
2         3
2         2

因此,对于用户ID 2只是课程id的更新,但对于用户ID 1,它是更新和删除。此表中有唯一的约束,因此无法将所有1更新为3并删除重复项。

2 个答案:

答案 0 :(得分:1)

首先删除会产生重复的内容:

delete uc1
from UserCourse uc1
inner join UserCourse uc3 on uc3.UserId = uc1.UserId
where uc1.CourseId = 1 and uc3.CourseId = 3

然后,只需进行更新:

update UserCourse set CourseId = 3 where CourseId = 1

答案 1 :(得分:0)

我会分两个阶段来完成......首先更新。

update table 
set CourseID = 3 
where CourseID = 1

然后删除欺骗

with cte as (
select *, row_number() over (partition by UserID, CourseID order by CourseID) RN
)


select * from cte where RN <> 1
--the below command will delete what is returned from the select
--delete from cte 
--where RN <> 1