那要看你想去掉哪个重复的字段了 比如不想让course字段有重复的值就是: select distinct course from tablename 去看看联机帮助
create table #T(id int,name varchar(5),course int) insert into #T select 1,'hh',80 union all select 2,'hh',80 union all select 3,'hh',80 select * from #TDELETE from #T where [ID] NOT IN (SELECT TOP 1 [ID] FROM #T ORDER BY [ID]) select * from #T/*(3 row(s) affected)id name course ----------- ----- ----------- 1 hh 80 2 hh 80 3 hh 80(3 row(s) affected) (2 row(s) affected)id name course ----------- ----- ----------- 1 hh 80(1 row(s) affected) */
delete a where id not in (select min(id) from a group by name,course) 看看行不?
select distinct course from tablename
去看看联机帮助
insert into #T
select 1,'hh',80 union all
select 2,'hh',80 union all
select 3,'hh',80
select * from #TDELETE from #T
where [ID] NOT IN
(SELECT TOP 1 [ID] FROM #T ORDER BY [ID])
select * from #T/*(3 row(s) affected)id name course
----------- ----- -----------
1 hh 80
2 hh 80
3 hh 80(3 row(s) affected)
(2 row(s) affected)id name course
----------- ----- -----------
1 hh 80(1 row(s) affected)
*/
看看行不?
1.方法一
可以不用语句
假设原来的表为Table,A重复则为重复,需要保留一笔即可
建立一张具有和Table相同结构的临时表myTable,单击鼠标右键,选择所有任务,选择管理索引,选择新建,起个索引名字,列就是a,建立一个索引,勾选上唯一(unique),勾选上忽略重复的值,其他不要选择!然后把资料insert into到临时表,
此时SQL Server会返回如下提示:
服务器: 消息 3604,级别 16,状态 1,行 1
已忽略重复的键。
它表明在产品信息临时表myTable中不会有重复的行出现。然后将原表Table清空,并将临时表myTable中数据导入,最后删除临时表myTable。
这样就完成了对表中重复记录的删除。该方法的执行速度都是相当快的,而且因为几乎不用写语句,所以它也是很安全的。不过要依靠你的A,万一你操作不当,没有关系,不要那么急着删除原来的表,这样不会出什么异常,错删除纪录!2.如果你是认为要A,B个子段相同才认为是重复,那么你就是组合字段为主键,方法也是如上3.如果非要用语句,用 MorningTea(一勺抹茶)的 ,因为你要key 值,如果没有就自己造一个,用identity(data_type,seed,increment),select到一个临时表,然后删除重复的,然后删除原表所有,然后插入即可