精华内容
下载资源
问答
  • MySQL 查询过滤重复数据

    万次阅读 2017-10-13 17:01:50
    1.查询new 表中去除title字段的重复数据,显示id最大的那条数据 Select * From new Where id In (Select Max(id) From new Group By title) ; 2.查询表中重复数据 Select * From 表 Where 重复字段...

    1.查找重复字段p_name的重复条数

    Select p_name,count(*) as count from zyx_member group by p_name having count>1;

    2.查询new 表中去除title字段的重复数据,显示id最大的那条数据

    Select * From new Where id In (Select Max(id) From new Group By title) ;

    3.查询表中重复数据

    Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1) 

    展开全文
  • 查询表几条demo数据,名字相同,时间不同 select id,name,create_date fromsys_user 方法1:最简单,且字段全部相同,排除其他字段不同; 先对表按照时间desc排序,在查询该层使用group by 语句,它会按照分组...

    先查询表几条demo数据,名字相同,时间不同

    select id,name,create_date from sys_user 

    方法1:最简单,且字段全部相同,排除其他字段不同; 

    先对表按照时间desc排序,在查询该层使用group by 语句,它会按照分组将你排过序的数据的第一条取出来

    select id,name,create_date from ( select * from sys_user order by create_date  desc) a group by a.name 

    方法2:使用not exists,该方法通过相同名字的不同创建的时间进行比较

    select id,name,create_date from sys_user a

    where not exists (select * from sys_user b where a.name = b.name and a.create_date < create_date )  ;

    方法3:使用内关联的方式;

    select * from sys_user a
          inner join (
            -- 先查询出最后一条数据的时间
            select id,name, MAX(create_date) create_date from sys_user
     group by name
          ) b on a.name = b.name and a.create_date = b.create_date  

     

    展开全文
  • mysql 过滤重复数据 group by和distinct

    千次阅读 2020-03-24 16:02:27
    1.group by过滤重复数据 用法:对table表中两个字段都重复的...group by过滤重复数据还可以做到很灵活,例如想对重复几次的数据过滤,比如查询重复3次以上的记录 select column1,column2,count(1) as count ...

    1.group by过滤重复数据

    用法:对table表中两个字段都重复的过滤

    SELECT column1, column2
    FROM table
    GROUP BY column1, column2;

    group by过滤重复数据还可以做到很灵活,例如想对重复几次的数据过滤,比如查询重复3次以上的记录

    select column1,column2,count(1) as count 
    from table
    group by column1,column2
    having count>3

    2.distinct过滤重复数据

    用法:对table表中两个字段都重复的过滤

    SELECT DISTINCT column1, column2
    FROM table;

    注意:

    1.distinct可以加括号,也可以不加;加括号写法上只能对一个字段加括号,不然会报错,如:DISTINCT(column1), column2,虽然只对一个字段加括号,但是仍然是

    对两个字段都重复的过滤,不会只对column1字段重复过滤;结果DISTINCT column1, column2无差别

    2.distinct必须放在要查询字段的开头,SELECT column1, DISTINCT(column2)报错

    3.性能上两者区别

    在一个有10w条记录的表中进行查询,

    distict耗时:  0.078ms

    group by 耗时:0.031ms

    给查询的列添加索引之后:

    distict耗时:     0.00072550ms

    group by 耗时:0.00071650ms

    所以不管怎样,group by都要比distinct要快,从性能上推荐使用group by

     

    展开全文
  • 单表的唯一查询用:distinct多表的唯一查询用:group bydistinct 查询多表时,left join 还有效,全连接无效,在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余...
  • 主要为大家详细介绍了MySQL处理重复数据的实现代码,如何防止数据表出现重复数据及如何删除数据表中的重复数据,感兴趣的小伙伴们可以参考一下
  • mysql查询表里的重复数据方法

    万次阅读 2019-08-08 11:34:31
    1 2 3 4 INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11') delete from hk_test where username='qmf1' and passwd='qmf1' MySQL查询表里的重复数据记录: 先查看重复的原始数据...

    1

    2

    3

    4

    INSERT INTO hk_test(username, passwd) VALUES

    ('qmf1', 'qmf1'),('qmf2', 'qmf11')

      

    delete from hk_test where username='qmf1' and passwd='qmf1'

     

     

    MySQL里查询表里的重复数据记录:

    先查看重复的原始数据:

     

    场景一:列出username字段有重读的数据

    ?

    1

    2

    3

    select username,count(*) as count from hk_test group by username having count>1;

      

    SELECT username,count(username) as count FROM hk_test GROUP BY username HAVING count(username) >1 ORDER BY count DESC;

     

     

    这种方法只是统计了该字段重复对应的具体的个数

    场景二:列出username字段重复记录的具体指:

    ?

    1

    2

    3

    4

    5

    select * from hk_test where username in (select username from hk_test group by username having count(username) > 1)

      

    SELECT username,passwd FROM hk_test WHERE username in ( SELECT username FROM hk_test GROUP BY username HAVING count(username)>1)

      

    但是这条语句在mysql中效率太差,感觉mysql并没有为子查询生成临时表。在数据量大的时候,耗时很长时间

     

     

    解决方法:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    于是使用先建立临时表

      

    create table `tmptable` as (

    SELECT `name`

    FROM `table`

    GROUP BY `name` HAVING count(`name`) >1

    );

      

    然后使用多表连接查询

      

    SELECT a.`id`, a.`name`

    FROM `table` a, `tmptable` t

    WHERE a.`name` = t.`name`;

      

    结果这次结果很快就出来了。

      

    distinct去重复

      

    SELECT distinct a.`id`, a.`name`

    FROM `table` a, `tmptable` t

    WHERE a.`name` = t.`name`;

    场景三:查看两个字段都重复的记录:比如username和passwd两个字段都有重复的记录:

    ?

    1

    2

    select * from hk_test a

    where (a.username,a.passwd) in (select username,passwd from hk_test group by username,passwd having count(*) > 1)

     

     

    场景四:查询表中多个字段同时重复的记录: 

    1

    select username,passwd,count(*) from hk_test group by username,passwd having count(*) > 1

     

     

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    MySQL查询表内重复记录

      

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

    (一)

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

    select *

    from people

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

      

    2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有一个记录

    delete from people

    where peopleId in (select peopleId

    from people group by peopleId having count(peopleId)>1)

    and min(id) not

    in (select id 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

     

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    SELECT * from tab1 where CompanyName in( SELECT companyname from tab1 GROUP BY CompanyName HAVING COUNT(*)>1);

    -- 129.433ms

      

    SELECT * from tab1 INNER join ( SELECT companyname from tab1 GROUP BY CompanyName HAVING COUNT(*)>1) as tab2 USING(CompanyName);

    -- 0.482ms

      

    方法二

      

      有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如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)

     

    常用的语句

      

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

      

     代码如下 复制代码

     SELECT * FROM table WHERE mail_id IN (SELECT mail_id FROM table GROUP BY mail_id HAVING COUNT(mail_id) > 1);

      

      

    2、删除表中多余的重复记录,重复记录是根据单个字段(mail_id)来判断,只留有rowid最小的记录

      

     代码如下 复制代码

    DELETE FROM table WHERE mail_id IN (SELECT mail_id FROM table GROUP BY mail_id HAVING COUNT(mail_id) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id HAVING COUNT(mail_id )>1);

      

      

    3、查找表中多余的重复记录(多个字段)

      

     代码如下 复制代码

    SELECT * FROM table WHERE (mail_id,phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COUNT(*) > 1);

      

      

    4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录

      

     代码如下 复制代码

     DELETE FROM table WHERE (mail_id,phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COU(www.jb51.net)NT(*) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id,phone HAVING COUNT(*)>1);

      

      

    5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

      

     代码如下 复制代码

    SELECT * FROM table WHERE (a.mail_id,a.phone) IN (SELECT mail_id,phone FROM table GROUP BY mail_id,phone HAVING COUNT(*) > 1) AND rowid NOT IN (SELECT MIN(rowid) FROM table GROUP BY mail_id,phone 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

      

      

      

    (一)单个字段

      

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

      

     代码如下 复制代码

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

      

      

    2、删除表中多余的重复记录,根据(question_title)字段来判断,只留有一个记录

      

     代码如下 复制代码

    delete from questions

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

    and min(id) not in (select question_id from questions group by question_title having count(question_title)>1)

      

    (二)多个字段

      

    删除表中多余的重复记录(多个字段),只留有rowid最小的记录

      

     代码如下 复制代码

    DELETE FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM que(www.jb51.net)stions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1)

      

      

    用上述语句无法删除,创建了临时表才删的,求各位达人解释一下。

      

     代码如下 复制代码

    CREATE TABLE tmp AS SELECT question_id FROM questions WHERE (questions_title,questions_scope) IN (SELECT questions_title,questions_scope FROM questions GROUP BY questions_title,questions_scope HAVING COUNT(*) > 1) AND question_id NOT IN (SELECT MIN(question_id) FROM questions GROUP BY questions_scope,questions_title HAVING COUNT(*)>1);

      

    DELETE FROM questions WHERE question_id IN (SELECT question_id FROM tmp);

      

    DROP TABLE tmp;

    查找mysql数据表中重复记录
    mysql数据库中的数据越来越多,当然排除不了重复的数据,在维护数据的时候突然想到要把多余的数据给删减掉,剩下有价值的数据。

    以下sql语句可以实现查找出一个表中的所有重复的记录.
    select user_name,count(*) as count from user_table group by user_name having count>1;

    参数说明:

    user_name为要查找的重复字段.

    count用来判断大于一的才是重复的.

    user_table为要查找的表名.

    group by用来分组

    having用来过滤.

    把参数换成自己数据表的相应字段参数,可以先在Phpmyadmin里面或者Navicat里面去运行,看看有哪些数据重复了,然后在数据库里面删除掉,也可以直接将SQL语句放到后台读取新闻的页面里面读取出来,完善成查询重复数据的列表,有重复的可以直接删除。

    效果如下:

     

    缺点:这种方法的缺点就是当你的数据库里面的数据量很大的时候,效率很低,我用的是Navicat测试的,数据量不大,效率很高,当然,网站还有其它查询数据重复的SQL语句,举一反三,大家好好研究研究,找到一个适合自己网站的查询语句。

    展开全文
  • 1、replicate_do_db 和 replicate_ignore_db 不要同时出现。容易出现混淆。... 以上在slave上均能正确复制,tb1 有数据,tb2没有数据。 不使用use 语句 insert into db1.tb1 values (11); insert into db2.tb2 v
  • #coding:utf-8 import mysql.connector mydb = mysql.connector.connect( host='localhost', user='root', passwd='123456', database='mydatabase', buffered = True ) print(mydb) #1、创建数据库...
  • mysql查询去除重复记录

    万次阅读 多人点赞 2019-03-01 21:54:38
    mysql查询去除重复记录 1:使用distinct select distinct name from a where statesign=0 查询表a中的name字段,去除重复记录 2:使用group by select name from a where statesign=0 group by name 查询表a中的name...
  • 如若表中的部分字段没有唯一约束性,就会查询重复数据。为了查询出不重复的数据,MYSQL 提供了distinct 关键字实现数据去重。 例: TEST 数据库中的数据表TABLE,其表结构和表数据如下 select a.* from table a; ...
  • 查询指定店铺下tiltle名重复的sql语句 SELECT * FROM tableName a WHERE ( a.shop_id, a.`name` ) IN ( SELECT provider_id, NAME FROM tableName ...根据多个条件查询重复数据的可以一次类推 ...
  • 1. 查看过滤重复后的数据 思路, group by 分组可以对多个列进行分组, 分组后可以过滤掉重复的数据 sql语句: SELECT id,`name`,age,count(1) FROM test GROUP BY `name`,age 2. 查看重复的数据 刚刚的...
  • MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦。用法也很简单: SELECT DISTINCT * FROM tableName ...
  • MySQL查询所有数据,其中重复数据中只保留最新的一条,其余的过滤今天遇到的问题,数据库的数据中的某个条码号可能存在着不同时间的多条数据,但是业务只想查询全部数据,并且单个条码号的最新的一条数据 ...
  • mysql 查询重复与删除重复数据

    千次阅读 2018-12-26 09:59:07
    一、根据身份证查询重复数据 方法、select count(*) as repeat_count,sfzhm from gaj_gx_hjxx_copy1 group by ...二、过滤重复数据 方法1、select distinct name,age from test_01; 方法2、select name,age,g...
  • mysql根据某个字段查询重复数据记录

    千次阅读 2021-01-04 14:50:51
    select * from sys_user where name in (select name from sys_user group by name having count(name) > 1);
  • Mysql查询字段去除指定列重复数据

    千次阅读 2020-12-06 22:54:15
    Distinct关键字主要用来在SELECT查询记录中根据某指定字段的值去除重复记录 SELECT DISTINCT [字段名] FROM [表名] WHERE [检索条件字句] eg: select distinct name from user_info;
  • 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: 代码如下: INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES (‘test9@163.com’, ‘99999’, ...
  • 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...
  • Mysql的select in会自动过滤重复数据

    千次阅读 2018-01-03 00:36:00
    in范围内的数据,如果有重复的,只会选择第一个数据。 所以如果不是直接使用SQL语句来查询,而是在代码中来查询时,记得使用 distinct 关键字 如: select id, name from table1 where ref_id in ( select id from...
  • 主要介绍了MySQL处理重复数据的方法,处理重复数据包括防止表中出现重复数据、统计重复数据过滤删除重复数据,感兴趣的小伙伴们可以参考一下
  • MySQL基础知识 一、检索数据 1. SELECT select是使用最广泛的检索数据的语句。 检索要查的表的所有列: select * from (表名称)... ...用来检索不同行即不重复数据 select distinct (列名称) from (表名称)...
  • Mysql 查找某个字段过滤重复

    千次阅读 2017-11-16 17:58:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • select * from (select *,去重复字段 as code from 表名 order by id desc) t group by code;
  • MySQL 过滤多个重复字段

    千次阅读 2018-11-08 09:09:58
    MySQL 执行查询时,...关键点在于 COUNT(DISTINCT vs.name) ,DISTINCT 是 MySQL 用于过滤重复字段的关键字,但其默认只能紧跟在 SELECT 之后 此处通过 COUNT() 函数将其包裹后在指定字段,即可实现过滤效果 注意...
  • mysql查询表里的重复数据方法: 1 2 3 4 INSERT INTO hk_test(username, passwd) VALUES ('qmf1', 'qmf1'),('qmf2', 'qmf11')   delete from hk_test where ...
  • 如上图中的mysql表中的数据。如何筛选出datetime字段在4月份内跟datetime字段不包含4月份内,name字段和region字段相同的数据,即4月份中某个数据name为"AA",region为"东莞",跟不是在4月份内的某个数据name为"AA...
  • MySQL去除查询结果重复

    千次阅读 2019-09-18 02:10:29
    在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,537
精华内容 28,214
关键字:

mysql查询过滤重复数据

mysql 订阅