SqlServer中怎么删除重复的记录(表中没有id)

其实我在别的网址也查到过删除重复的记录,不知道我是我SqlServer2012版本太低还是啥原因

delete from sc
where (c#,s#) in (select c#,s# from sc group by c#,s# having count(1)>1)
and rowid not in (select min(rowid) from sc group by c#,s# having count(1)>1)

像这个就执行不通,(真想骂人),还tm这么多,首先这个表中你得有个rowid,我们平时都不会加的,而且where (s#,c#) in(select S#,c# from ...) 报错

所以,我就查查查,写写写,终于可以不用表中id就可以删除了。

先建立一个2个表Student和SC

use test

create table Student(S# varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10))

insert into Student values('01' , N'赵雷' , '1990-01-01' , N'男')

insert into Student values('02' , N'钱电' , '1990-12-21' , N'男')

insert into Student values('03' , N'孙风' , '1990-05-20' , N'男')

insert into Student values('04' , N'李云' , '1990-08-06' , N'男')

insert into Student values('05' , N'周梅' , '1991-12-01' , N'女')

insert into Student values('06' , N'吴兰' , '1992-03-01' , N'女')

insert into Student values('07' , N'郑竹' , '1989-07-01' , N'女')

insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')

insert into Student values('08' , N'王菊' , '1990-01-20' , N'女')

create table Course(C# varchar(10),Cname nvarchar(10),T# varchar(10))

insert into Course values('01' , N'语文' , '02')

insert into Course values('02' , N'数学' , '01')

insert into Course values('03' , N'英语' , '03')

create table Teacher(T# varchar(10),Tname nvarchar(10))

insert into Teacher values('01' , N'张三')

insert into Teacher values('02' , N'李四')

insert into Teacher values('03' , N'王五')

create table SC(S# varchar(10),C# varchar(10),score decimal(18,1))

insert into SC values('01' , '01' , 80)

insert into SC values('01' , '02' , 90)

insert into SC values('01' , '03' , 99)

insert into SC values('02' , '01' , 70)

insert into SC values('02' , '02' , 60)

insert into SC values('02' , '03' , 80)

insert into SC values('03' , '01' , 80)

insert into SC values('03' , '02' , 80)

insert into SC values('03' , '02' , 80)

insert into SC values('03' , '02' , 80)

insert into SC values('03' , '03' , 80)

insert into SC values('04' , '01' , 50)

insert into SC values('04' , '02' , 30)

insert into SC values('04' , '03' , 20)

insert into SC values('05' , '01' , 76)

insert into SC values('05' , '02' , 87)

insert into SC values('06' , '01' , 31)

insert into SC values('06' , '03' , 34)

insert into SC values('07' , '02' , 89)

insert into SC values('07' , '03' , 98)

insert into SC values('07' , '03' , 98)

insert into SC values('07' , '03' , 98)

go

1、删除student表中s#重复的记录

1.1重复的只有一个字段时

1.1查出重复的记录来

  由于student表中没有id,所以我们先搞个查询语句,并且自己创造个id

  select s#,row_number() over(partition by s# order by s#) as id from Student 

  注释:

    row_number() over(partition by s# order by s#) 
    按s#进行分组排序,row_number()表示s#相同情况下也进行排序,详细用法可以百度,谢谢

1.2删除重复的记录  

  with ab as(
    select * from

      (select s#,row_number() over(partition by s# order by s#) as id from Student ) a
    where id>1)
  delete from ab

  注释(可不看):

    因为where id>1是指将id=1的字段保留,多余的删除

    此公式Student是表名,s#是字段名,套用公式,只要修改有颜色的表名和字段名就行,其他可以不用管。

2.1删除SC中s#,c#两个字段均重复的记录(删除多个字段重复的记录)

2.1.1查询多个字段重复的记录,与1.1相似,就不解释了

  查询表SC中s#,c#两个字段均重复的记录,也标记为id

  select s#,c# ,row_number() over(partition by s#,c# order by s#,c#) as id from sc

2.1.2删除该记录

  删除id大于1的记录,由于id在where里面不能直接使用,所以要嵌套一个select * from (... )a where a.id>1 

  with abc as
    (select * from

      (select s#,c# ,row_number() over(partition by s#,c# order by s#,c#) as id from sc) a
    where id>1)
  delete from abc

  注释:

    s#,c#分别是【字段名1】和【字段名2】,而sc是表名,删除时套用以上公式修改这些有颜色的字就行。

    with ... as 可以自行百度看

 共同分享,如有更好的方法请留言,谢谢!

SqlServer中怎么删除重复的记录(表中没有id)的更多相关文章

  1. 在SQL Server中快速删除重复记录

     在SQL Server中快速删除重复记录 2006-07-17 21:53:15 分类: SQL Server 开发人员的噩梦——删除重复记录 想必每一位开发人员都有过类似的经历,在对数据库进行查询 ...

  2. Oracle使用游标删除所有用户数据表中的所有记录脚本

    应用场景:因为数据库中的数据涉及机密信息,希望一次性能删除掉所有数据,只保留数据表结构,供新项目开发程序用 测试结果:经查询已删除所有数据 存在问题:数据表如果存在外键的话下面脚本可能执行不成功,请自 ...

  3. ROWID的使用——快速删除重复的记录

    ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置.ROWID可以分为物理rowid和逻辑rowid两种.普通的表中的rowid是物理rowid,索引组织表(I ...

  4. SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据

    SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...

  5. SQL删除重复的记录(只保留一条)

    首先新建表: --创建示例表 CREATE TABLE t ( id ,) PRIMARY KEY, a ), b ) ) --插入数据 INSERT INTO t SELECT 'aa','bb' ...

  6. 如何使用MySQL一个表中的字段更新另一个表中字段

    [本文出自:https://www.jb51.net/article/150323.htm] 这篇文章主要介绍了如何使用MySQL一个表中的字段更新另一个表中字段,需要的朋友可以参考下 1,修改1列 ...

  7. vlookup函数基本使用--如何将两个Excel表中的数据匹配;excel表中vlookup函数使用方法将一表引到另一表

    vlookup函数基本使用--如何将两个Excel表中的数据匹配:excel表中vlookup函数使用方法将一表引到另一表 一.将几个学生的籍贯匹配出来‘ 二.使用查找与引用函数 vlookup 三. ...

  8. hbase使用MapReduce操作4(实现将 HDFS 中的数据写入到 HBase 表中)

    实现将 HDFS 中的数据写入到 HBase 表中 Runner类 package com.yjsj.hbase_mr2; import com.yjsj.hbase_mr2.ReadFruitFro ...

  9. sql之将一个表中的数据注入另一个表中

    sql之将一个表中的数据注入另一个表中 需求:现有两张表t1,t2,现需要将t2的数据通过XZQHBM相同对应放入t1表中 t1: t2: 思路:left join 语句: select * from ...

随机推荐

  1. 大数据 Big Data howto

    The Fourth Paradigm: Data-Intensive Scientific Discovery http://research.microsoft.com/en-us/collabo ...

  2. [转]jquery 鼠标放在图片上显示图片的放大镜效果jqzoom_ev-2.3

    本文转自:http://blog.csdn.net/weizengxun/article/details/6768183 鼠标放在图片上显示图片的放大镜效果使用jqzoom实现,本例版本2.3 效果图 ...

  3. RadControl使用相同的Theme

    我們僅須對兩個地方加一些程式碼,就可使所有的RadControl擁用相的Theme,如此一下不但可使Ap內布景主題一致,設計者亦不需要對每個控件做字型,顏色,大小等等瑣碎的設計. App.Xaml.c ...

  4. kindEditor完整认识 PHP上调用并上传图片说明

    最近又重新捣鼓了下kindeditor,之前写的一篇文章http://hi.baidu.com/yanghbmail/blog/item/c681be015755160b1d9583e7.html感觉 ...

  5. React.js 小书 Lesson3 - 前端组件化(二):优化 DOM 操作

    作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson3 转载请注明出处,保留原文链接和作者信息. 看看上一节我们的代码,仔细留意一下 change ...

  6. HDU 4357——String change——————【规律题】

    String change Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  7. Devexpress Xtrareport 创建主从报表

    效果 xtrareport 布局 From 代码 private DataSet Getdata() { DataSet ds = new DataSet(); //config配置字符串 strin ...

  8. 基于vue-cli 将webpack3 升级到 webpack4 配置

       升级webpack4前 先删除之前的webpack, babel-loader  下载 webpack npm i -D webpack@4 webpack-cli@3 webpack-dev- ...

  9. JAVA StringBuffer的用法

    在使用StringBuffer 的时候,习惯性的像String一样把他初始化了 StringBuffer result = null; 结果警告:Null pointer access: The va ...

  10. Linux目录配置——Linux目录配置标准:FHS

    事实上,FHS针对目录树架构仅定义出三层目录下应该放置哪些数据,分别是下面三个目录: 一./(根目录):与开机系统有关 根目录(/)所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一 ...