比如现在有一人员表  (表名:peosons)

若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来

select   p1.*   from   persons   p1,persons   p2   where   p1.id<>p2.id

and   p1.cardid   =   p2.cardid

and   p1.pname   =   p2.pname

and   p1.address   =   p2.address

可以实现上述效果.

几个删除重复记录的SQL语句

1.用rowid方法

2.用group by方法

3.用distinct方法

1。用rowid方法

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:

查数据:     select * from table1 a

where rowid !=(select   max(rowid)

from table1 b

where a.name1=b.name1 and a.name2=b.name2......)

删数据:

delete   from table1 a

where rowid !=(

select   max(rowid)

from table1 b where a.name1=b.name1 and a.name2=b.name2......

)

2.group by方法

查数据:

select count(num), max(name) from student --列出重复的记录数,并列出他的name属性

group by num

having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次

删数据:

delete from student

group by num

having count(num) >1

这样的话就把所有重复的都删除了。

3.用distinct方法 -对于小的表比较有用

create table table_new as   select distinct *   from table1 minux

truncate table table1;

insert into table1 select * from table_new;

查询及删除重复记录的方法大全

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 integerdeclare cur_rows cursor local for select 主字段,

count(*) from 表名 group by 主字段 having count(*) >;

1open cur_rowsfetch cur_rows into @id,

@maxwhile @@fetch_status=0beginselect @max = @max -1set rowcount @maxdelete from 表名

where 主字段 = @idfetch cur_rows into @id,@maxendclose cur_rowsset rowcount 0

方法二"重复记录"有两个意义上的重复记录,一是完全重复的记录,

也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,

而其他字段不一定重复或都重复可以忽略。

1、对于第一种重复,比较容易解决,使用select distinct * from tableName

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

如果该表需要删除重复的记录(重复记录保留1条),

可以按以下方法删除

select distinct * into #Tmp from

tableNamedrop table tableNameselect * into tableName

from #Tmpdrop table #Tmp

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

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

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

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

from tableNameselect 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)

mysql 查询相同字段的数据_MySql 几种查询相同字段中相同数据,及删除相同字段的相同数据的方法...相关推荐

  1. mysql 查询导入的数据_MySql多表查询及数据导入

    MySQL高级 外键(foreign key) 定义 让当前表字段的值在另一个表的范围内选择 语法 foreign key(参考字段名) references 主表(被参考字段名) on delete ...

  2. mysql慢查询日志平时开启吗_MySQL开启慢查询日志功能的方法

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里是否有很耗费资源的sql语句,这是一个有用的日志.它对于性能的影响不大(假设所有查询都很快),并且强调了那些最需要注意的查询(丢失 ...

  3. mysql清空表数据_mysql数据库之如何清空表中数据

    本篇文章主要讲述的是在数据库中使用清空命令,具有一定学习价值,有需要的朋友可以了解一下,希望能够对你有所帮助. 在做数据迁移,数据清洗或者写web项目时要将数据替换更新,那么有时要将表做清空处理 常用 ...

  4. 2021年广东高考各科成绩查询,2017年广东高考成绩五种查询方式一览

    高考成绩查询方式 考生可通过下列正式渠道查询今年普通高考成绩: (一)网站在线查询方式 考生登录广东考试服务网(http://www.5184.com),按提示操作即可查询查询高考各科成绩. 短信查询 ...

  5. mysql时间戳在某天内_mysql根据时间戳查询指定日期内数据

    MySql查询时间段的方法未必人人都会,下面为您介绍两种MySql查询时间段的方法,供您参考,希望对您能有所启迪. MySql的时间字段有date.time.datetime.timestamp等,往 ...

  6. mysql按日期查询数据_mysql按日期查询数据

    问题:mysql按日期查询一个月内的数据,查询返回时结果集中只显示有数据的结果 需求:查询结果中假如当天没有数据,自动填零并输出 事件描述: sql语句: select DATE_FORMAT(dat ...

  7. mysql查询不同库的数据_MySQL不同表查询,不同数据库查询

    (内容比较弱~欢迎大神们指点~) 在MySQL中~要实现不同表的查询和不同数据库的查询,首先得有地方查吧 1.建立数据库 create databaes test; use test; create ...

  8. mysql查询时间提前五天_mysql选择月份查询该月有付款的数据(间隔x月并提前5天付款)...

    ktime  开始时间串 dtime 到期时间串 jmonth  付费间隔月份数  可选(1,3,6,12) 需要   按月查询数据 比如说 ktime=1228406400(2008-12-5)  ...

  9. mysql 只显示第一条记录_MySQL:此种查询结果,怎么仅保留第一条记录?

    select id, value from test; 查询结果如下 id value yy 123 zz 234 zz 456 仅想保留id字段的第一条记录,在5.7以下版本中使用"sel ...

最新文章

  1. 垃圾清理代码_最近弄了个清理电脑C盘的经验
  2. Markdown编辑器使用
  3. defer和async属性详解
  4. XGBoost在携程搜索排序中的应用
  5. 计算指数c语言2的n次方,计算2的N次方........有什么错吗?
  6. Truncated SVD for faster dection
  7. 满二叉树及完全二叉树的相关性质证明
  8. src refspec xxx does not match any
  9. Atitit 在线机器人 自动化技术一览 目录 1. 俩个要点 1 1.1. 识别控件(对话框 按钮 列表等) 1 1.2. Dom控件操作 1 1.3. 鼠标键盘操作 api 1 2. 可以使用
  10. 目前最全的动画名称中英对照表
  11. Linux基础知识: SSH命令
  12. Linux文件--文件命名规则
  13. 彻底了解DVD:从入门到精通(三)[转]
  14. 微信PC版多开的方法
  15. 开源机器人库orocos KDL 学习笔记(二):Geometric
  16. (1)在ensp上面进行静态路由和默认路由测试(直接上手)
  17. nginx_centos
  18. Lambda表达式和Stream流
  19. MemFire教程|PostgreSQL RLS介绍
  20. Linux下安装nginx,启动和重启

热门文章

  1. Java学习笔记:04面向对象-内部类_访问修饰符_final
  2. CSP-J 2020 入门组/普及组
  3. 从《乔布斯传》里得到的20条经验和教训
  4. GitHub 术语解释
  5. 家用小型监控器安装位置与功能
  6. 统计学中,Z值与T值怎么换算 T-score transform Z-score
  7. 看《赢在中国》的一点思绪
  8. 有限体积法(6)——离散格式的特性
  9. 有限体积法(3)——一维扩散方程数值求解(第一类边界条件)
  10. 微信好友性别分布与签名分析词云图