sql 单表/多表查询去除重复记录

单表distinct

多表group by

group by 必须放在 order by 和 limit之前,不然会报错

************************************************************************************

1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

3、查找表中多余的重复记录(多个字段) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录 delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录 select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

(二) 比方说 在A表中存在一个字段“name”, 而且不同记录之间的“name”值有可能会相同, 现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项; Select Name,Count(*) From A Group By Name Having Count(*) > 1

如果还查性别也相同大则如下: Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

(三) 方法一

declare @max integer,@id integer

declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1

open cur_rows

fetch cur_rows into @id,@max

while @@fetch_status=0

begin

select @max = @max -1

set rowcount @max

delete from 表名 where 主字段 = @id

fetch cur_rows into @id,@max end

close cur_rows

set rowcount 0

方法二

"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用

select distinct * from tableName

就可以得到无重复记录的结果集。

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

select distinct * into #Tmp from tableName

drop table tableName

select * into tableName from #Tmp drop table #Tmp

发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集

select identity(int,1,1) as autoID, * into #Tmp from tableName

select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

select * from #Tmp where autoID in(select autoID from #tmp2)

最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)

(四) 查询重复

select * from tablename where id in (select id from tablename

group by id

having count(id) > 1

)

3、查找表中多余的重复记录(多个字段) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)

运行会产生问题,where(a.peopleId,a.seq)这样的写发是通不过的!!!

转载于:https://www.cnblogs.com/cwqcwq/p/4670638.html

sql去除重复语句(转)相关推荐

  1. mysql sql 去除重复行_SQL查询语句去除重复行

    1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select distinct * from table(表名) where (条件) 2.存在部分字段相同的纪录 ...

  2. SQL 去除重复数据 UNION all 和UNION 的用法

    使用UNION关键字去除重复数据要注意,用UNION连接的前后两个SQL语句查询出来的结果在字段顺序,字段名称,字段类型都要一致. 1.UNION all 是将两个查询语句结果合并输出,不去除重复数据 ...

  3. sql 去除重复之distinct详解

    前言: 在sql数据查询中,有时候,数据可能会出现很多重复相同的数据,但是,我们有时候只是想要查询出不同的数据,把多余重复的数据过滤掉,可以通过使用distinct来实现过滤重复数据,返回唯一的数据. ...

  4. SQL 去除重复、获取最新记录

    应用中常会有需要去除重复的记录,或者获取某些最新记录(如:每个用户可以答题多次,每次答题时间不同,现在要获取所有用户的最新答题记录,即每个用户取最新的一条) 使用group 和max 即可实现上述功能 ...

  5. SQL 去除重复值进行统计问题

    问题 有个查询问题始终不得其解,记得 在查询中有一个distinct选项可以去除重复值 表中  name ip  a    127.0.0.1  a    127.0.0.1  a    192.16 ...

  6. Oracle sql 去除重复 和 字段去除空格

    1.去除重复两种方式 1.1 distinct 函数 select distinct userid from projectinfo where projecttype in (select id f ...

  7. php sql语句去掉重复,sql 去除重复记录的语句

    IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb] ([name] [nvarchar](10),[value] ...

  8. php sql 去除重复数据,MSSQL_快速删除重复记录,SQL Server如何实现?,如果一张表的数据达到上百万 - phpStudy...

    如果一张表的数据达到上百万条,用游标的方法来删除简直是个噩梦,因为它会执行相当长的一段时间-- 开发人员的噩梦--删除重复记录 想必每一位开发人员都有过类似的经历,在对数据库进行查询或统计的时候不时地 ...

  9. SQL去除重复数据,无主键

    一个没留神,数据库表table1被同事改的代码插入了重复数据,是很规律的每一条数据重复出现两次,查重SQL如下: SELECT column1, count(*) num FROM table1 GR ...

最新文章

  1. 如何有效编写软件的75条建议
  2. kettle 将job等导入导出成xml
  3. java.lang.NullPointerException错误分析
  4. wxWidgets:wxWizard类用法
  5. ssh免密登陆失败原因总结(Linux)
  6. 链接服务器访问接口返回了消息没有活动事务,因为链接服务器 SQLEHR 的 OLE DB 访问接口 SQLNCLI10 无法启动分布式事务。...
  7. R语言聚类算法之k中心聚类(K-medoids)
  8. python装饰器的通俗理解_Python|闭包、装饰器,简单的实例,通俗的理解
  9. array2xml xml2array
  10. torch summary_留学论文如何5分钟搞定写作Summary,速看!
  11. 异常:贴dependency报错
  12. 账龄分析表excel模板_这种高端表格模板你会做吗?Excel制作带照片的员工信息查询表...
  13. [Deprecated!] Android开发案例 - 微博正文
  14. linux 设置unix格式化,linux格式化
  15. 这片太虐,抱歉,我退场了。
  16. 仁、义、礼、智、信、衷、孝、节、勇、和
  17. NPN三极管电平反向电路
  18. linux xunsou_Linux下的迅搜(xunsearch)安装使用教程,并设置成开机启动服务
  19. nginx 初级总汇知识点
  20. 链接脚本(一)基本概念和格式

热门文章

  1. 解决Java Web项目无法读取配置文件问题
  2. 基数排序算法图解分析
  3. linux查看docker使用率,Linux系统非Docker环境如何限制CPU使用率
  4. html 文件路径 d files,tmpfiles.d
  5. 【干货】网工面试最常见的几大问题,附答案
  6. OAM 深入解读:使用 OAM 定义与管理 Kubernetes 内置 Workload
  7. Knative 实战:一个微服务应用的部署
  8. python进行矩阵计算公式_纯python进行矩阵的相乘运算的方法示例
  9. 对象后加一个值 php_PHP 对象使用
  10. 长安大学二级c语言考试题,长安大学03-04C语言A卷试题