我有一个包含用户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并删除重复项。
答案 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