Sql server 从具有标识的SQL Server 2012表中删除重复记录

Sql server 从具有标识的SQL Server 2012表中删除重复记录,sql-server,Sql Server,我试图复制一个场景,在这个场景中,我需要从表中删除除一行之外的所有重复行。但所有行都有一个唯一的标识列 为了让事情变得更简单,我创建了一个小的测试表student,脚本如下所示 create table student ( id int, rollno int, name varchar(50), course varchar(50) ) GO insert into student values(1,1335592,'john','biology') ins

我试图复制一个场景,在这个场景中,我需要从表中删除除一行之外的所有重复行。但所有行都有一个唯一的标识列

为了让事情变得更简单,我创建了一个小的测试表student,脚本如下所示

create table student 
(
    id int,
    rollno int,
    name varchar(50),
    course varchar(50)
)
GO

insert into student values(1,1335592,'john','biology')
insert into student values(2,1335592,'john','biology')
insert into student values(3,1335592,'john','biology')
insert into student values(4,1335592,'john','biology')
insert into student values(5,1335593,'peter','biology')
insert into student values(6,1335593,'peter','biology')
insert into student values(7,1335593,'peter','biology')
GO

select * from student
id  rollno  name    course
1   1335592 john    biology
2   1335592 john    biology
3   1335592 john    biology
4   1335592 john    biology
5   1335593 peter   biology
6   1335593 peter   biology
7   1335593 peter   biology
这将生成如下表

create table student 
(
    id int,
    rollno int,
    name varchar(50),
    course varchar(50)
)
GO

insert into student values(1,1335592,'john','biology')
insert into student values(2,1335592,'john','biology')
insert into student values(3,1335592,'john','biology')
insert into student values(4,1335592,'john','biology')
insert into student values(5,1335593,'peter','biology')
insert into student values(6,1335593,'peter','biology')
insert into student values(7,1335593,'peter','biology')
GO

select * from student
id  rollno  name    course
1   1335592 john    biology
2   1335592 john    biology
3   1335592 john    biology
4   1335592 john    biology
5   1335593 peter   biology
6   1335593 peter   biology
7   1335593 peter   biology
我想在结果集中保留ID为“1”和“5”的记录,并删除所有其他内容。有没有办法做到这一点

我们将非常感谢您的帮助

谢谢 Shammas使用CTE

质疑

这是一个简单的查询

Delete from student 
where id not in (select min(id) 
                 from student 
                 group by rollno, name, course) 
你可以用 , ,

这些都会给你结果

尝试:


请参见

谢谢乌拉斯……这对我很有效。。发布问题后,我找到了定义良好的链接。谢谢你的回复,银行漫游者。这个脚本也是正确的。很抱歉迟了答复
DELETE s
FROM student s
JOIN student s2 ON s.course = s2.course
     AND s.NAME = s2.NAME
     AND s.rollno = s2.rollno
WHERE s2.id < s.id