删除重复值SQL
问题描述:
SELECT
*
FROM
Registrations AS R1
INNER JOIN Registrations AS R2
ON R2.UserItemId = R1.UserItemId
AND R2.CourseOfferingId = R1.CourseOfferingId
AND R2.Id != R1.Id
WHERE
R2.Id > R1.Id
我应该如何删除重复值?删除重复值SQL
感谢
答
我会在你的问题采取了刺。这只是一个猜测,基于您提供的查询。一个完整的问题将描述你的意思是一个重复的行。
delete from Registrations
where exists (
select 1
from Registrations r2
where r2.UserItemId = Registrations.UserItemId
and r2.CourseOfferingId = Registrations.CourseOfferingId
and r2.Id < Registrations.Id
);
显然,你必须具有相同UserItemId
和CourseOffereningId
但不同Id
值多行。我假设你想保留最低的Id
并丢弃其他人。
查询中的子查询会为每个行的表,并检查是否有喜欢它,但以较低的编号另一行。如果答案是肯定的,则该行被删除。
答
你可以尝试这样的查询
;with cte as (
select *, RowN = row_number() over(partition by useritemid, courseofferingid, id order by id) from Registrations)
delete from cte where Rown > 1
+0
如果您包含有关CTE的参考文献,为了他们的缘故,这可能有助于OP ... –
这个问题是不完整的,但我会提供给你:'从注册删除存在(从注册r2中选择1,其中r2.UserItemId = Registrations.UserItemId和r2.CourseOfferingId = Registrations.CourseOfferingId和r2.Id shawnt00
select 1意味着什么在这里? – user18160
你可以使用'select *'或任何其他表达式。关键是子查询是否返回一个结果 - 结果并不重要,如果你只运行'select 1 '你得到一个单行和一列的值为'1' – shawnt00