• 创建表和測试数据

/*
表结构 */

DROPTABLEIFEXISTS
`t1`;

CREATETABLEIFNOTEXISTS
`t1`(

`id` INT(1)NOTNULL
AUTO_INCREMENT,

`name` VARCHAR(20)NOTNULL,

`add`VARCHAR(20)NOTNULL,

PRIMARYKEY(`id`)

)Engine=InnoDB;



/*
插入測试数据 */

INSERTINTO
`t1`(`name`,`add`)VALUES

('abc',"123"),

('abc',"123"),

('abc',"321"),

('abc',"123"),

('xzy',"123"),

('xzy',"456"),

('xzy',"456"),

('xzy',"456"),

('xzy',"789"),

('xzy',"987"),

('xzy',"789"),

('ijk',"147"),

('ijk',"147"),

('ijk',"852"),

('opq',"852"),

('opq',"963"),

('opq',"741"),

('tpk',"741"),

('tpk',"963"),

('tpk',"963"),

('wer',"546"),

('wer',"546"),

('once',"546");

执行完上面的SQL,能够用
SELECT*FROM
`t1` 測试一下。


  • 查找全部反复的数据

反复数据仅仅显示当中一条:

/* 查找全部反复数据,反复数据仅仅显示一次 */
SELECT
*
FROM
`t1`
GROUP BY `name`
HAVING COUNT(1) > 1
#HAVING COUNT(1) = 1 #这条语句表示显示当中不反复的数据

效果例如以下:

    id  name    add     

------  ------  --------

     1  abc     123     

    12  ijk     147     

    15  opq     852     

    18  tpk     741     

    21  wer     546     

     5  xzy     123     


反复数据每条都显示

/*
查找全部反复数据(反复数据反复显示 */

SELECT
t1.*
FROM
t1,
(SELECT
t1.name,
t1.add
FROM
t1
GROUP BY `name`,
`add`
HAVING COUNT(1) > 1) AS `t2`
WHERE `t1`.`name` = `t2`.`name`
AND `t1`.`add` = `t2`.`add`

查询结果例如以下:


    id  name    add     

------  ------  --------

     1  abc     123     

     2  abc     123     

     4  abc     123     

     6  xzy     456     

     7  xzy     456     

     8  xzy     456     

     9  xzy     789     

    11  xzy     789     

    12  ijk     147     

    13  ijk     147     

    19  tpk     963     

    20  tpk     963     

    21  wer     546     

    22  wer     546     

  • 显示全部数据(反复数据仅仅显示一次)

以下的SQL简单高速有效,但不能保证反复字段的records显示哪一个record。

SELECT 

    * 

FROM

    t1 

GROUP BY NAME 

#having count(*) > 1 #加上这条语句,反复字段的records仅仅显示一次

  • 删除反复数据:

1 最简单高速 的方法:

1. 新建一个一样表结构的表,经反复内容字段设置为unique

2. 然后运行语句:INSERT IGNORE INTO new_table SELECT * FROM old_table

对于本题就是:

1. 新建t1_copy,然后将name。add设置为主键

2.运行INSERT IGNORE INTO t1_copy SELECT * FROM t1 ORDER BY t1.`id`。 OK

2 笨方法UNION(数据量大时非常慢):

SELECT
*
FROM
t1
GROUP BY `name`,
`add`
HAVING COUNT(1) > 1
UNION
SELECT
*
FROM
t1
GROUP BY `name`,
`add`
HAVING COUNT(1) = 1
ORDER BY id

注意:

这里表中有一个主键id。若没有主键id。数据量大时会非常慢。这样能够人为插入一个主键id。如

參考文章:




转载请注明出处:http://blog.csdn.net/acema/article/details/37692867




版权声明:本文博主原创文章,博客,未经同意不得转载。

重复记录(duplicate records)相关运营数据的更多相关文章

  1. Oracle删除重复记录只保留一条数据的几种方法

    1. 问题描述 BBSCOMMENT表为BBSDETAIL的从表,记录商户评价信息.因为数据倒腾来倒腾去的,有很多重复数据.表结构如下: COMMENT_ID NOT NULL NUMBER --主键 ...

  2. 删除Mysql数据表中多余的重复记录的sql语句

    数据表 sniper_tb 中存在主键 id,字段url,现需要在url字段上添加 unique,但由于url存在重复记录,导致添加失败. 如何删除表中多余的url重复记录,仅保持一条? 思路一 将 ...

  3. mysql 数据表中查找、删除重复记录

    为了性能考虑,在阅读之前提醒大家,如果有子查询,子查询查询到的数据最好不要超过总数据量的30%. 查询有重复数据的记录 select * from F group by a,b,c,d having ...

  4. mysql插入数据与删除重复记录的几个例子(收藏)

    mysql插入数据与删除重复记录的几个例子 12-26shell脚本实现mysql数据的批量插入 12-26mysql循环语句插入数据的例子 12-26mysql批量插入数据(insert into ...

  5. oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录)

    oracle 快速删除大批量数据方法(全部删除,条件删除,删除大量重复记录) 分类: ORACLE 数据库 2011-05-24 16:39 8427人阅读 评论(2) 收藏 举报 oracledel ...

  6. Sql Server删除数据表中重复记录 三种方法

    本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1 ...

  7. Datatable 中的数据查询(查询不重复记录)

    http://blog.csdn.net/lovexiaoxiao/article/details/3734932 //在sql中我们使用distinct查询不重复记录    //然而我在项目中表关系 ...

  8. mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句

    正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 .如下: 表字段和数据: SQL语句: [sql] view plain cop ...

  9. oracle中查找和删除重复记录的几种方法总结

    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 下面总结一下几种查找和删除重复记录的方法(以表CZ为例): 表CZ的结 ...

随机推荐

  1. php运用curl触发后台脚本不超时执行某项任务

    运用curl 设置超时,触发后台脚本执行 例如一些需要长时间等待的任务,如创建数据库,下载网络图片等 $ch = curl_init();//$ch资源可以请求多个连接 curl_setopt($ch ...

  2. ERROR 2003 (HY000): Can't connect to MySQL server

    http://blog.csdn.net/longxibendi/article/details/6363934 一.问题的提出 /usr/local/webserver/mysql/bin/mysq ...

  3. uboot的mtd功能支持

    一.概述 1.MTD MTD是Flash的一种管理方法,将Flash划分成几个分区,便于管理. u-boot的MTD功能是在文件cmd_jffs2.c中实现的,由此我们可以知道怎样打开u-boot的M ...

  4. bzoj 1853: [Scoi2010]幸运数字 容斥

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1170  Solved: 406[Submit][Status] ...

  5. bzoj 1006: [HNOI2008]神奇的国度 弦图的染色问题&&弦图的完美消除序列

    1006: [HNOI2008]神奇的国度 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1788  Solved: 775[Submit][Stat ...

  6. wget命令解析

           今天一学信息安全的同学让我编写一个软件,功能大致如下:输入网站首页,自动下载该网站所有网页并保存?拿到后感觉属于搜索引擎相关的,说实话我就感觉会用到递归,不过我不会写,百度也没找到资料, ...

  7. VLD(Visual LeakDetector)内存泄露库的使用

    VLD简介 由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难.当您的程序越来越复杂时,它的内存管理也会变得越来越困难.内存泄漏.内存 ...

  8. leetcode面试准备:Summary Ranges

    1 题目 Given a sorted integer array without duplicates, return the summary of its ranges. For example, ...

  9. Resharper中注释代码的快捷键

    Resharper中     Visual Studio中 注释代码        Ctrl+Alt+/             Ctrl+E+C 取消注释        Ctrl+Alt+/     ...

  10. git cherry-pick 从其他分支检出指定的commit到当前分支

    http://think-like-a-git.net/sections/rebase-from-the-ground-up/cherry-picking-explained.html Git's o ...