精华内容
下载资源
问答
  • 删除表中重复数据sql语句 绝对经典和详细 太好了
  • 查询和删除表中重复数据sql语句 2008-07-07 15:13 1、查询表中重复数据。select * from people where peopleId in (select peopleId from people group by peopleId h...
    查询和删除表中重复数据sql语句
    2008-07-07 15:13
    1、查询表中重复数据。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、查找表中多余的重复记录(多个字段)

    查询及删除重复记录的方法大全elect * 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)

    转载于:https://www.cnblogs.com/JemBai/archive/2009/01/04/1368121.html

    展开全文
  • 工作中遇到MySQL对应系统表中存在脏数据的问题,重复的数据也属于脏数据的一种,如何去除表中重复数据,正确SQL如下: DELETE FROM pg_invoice_info_copy WHERE ( pg_invoice_code, pg_invoice_number, pg_...

    工作中遇到MySQL对应系统表中存在脏数据的问题,重复的数据也属于脏数据的一种。

    如何去除表中重复数据,正确SQL如下:

    DELETE
    FROM
    	pg_invoice_info_copy
    WHERE
    	(
    		pg_invoice_code,
    		pg_invoice_number,
    		pg_invoice_amount,
    		pg_invoice_tax_amount
    	) IN (
    		SELECT
    			pg_invoice_code,
    			pg_invoice_number,
    			pg_invoice_amount,
    			pg_invoice_tax_amount
    		FROM
    			(
    				SELECT
    					pg_invoice_code,
    					pg_invoice_number,
    					pg_invoice_amount,
    					pg_invoice_tax_amount
    				FROM
    					pg_invoice_info_copy
    				GROUP BY
    					pg_invoice_code,
    					pg_invoice_number,
    					pg_invoice_amount,
    					pg_invoice_tax_amount
    				HAVING
    					count(*) > 1
    			) f
    	)
    AND id NOT IN (
    	SELECT
    		id
    	FROM
    		(
    			SELECT
    				min(id) AS id
    			FROM
    				pg_invoice_info_copy
    			GROUP BY
    				pg_invoice_code,
    				pg_invoice_number,
    				pg_invoice_amount,
    				pg_invoice_tax_amount
    			HAVING
    				count(*) > 1
    		) t
    )
    

    执行结果如下:
    在这里插入图片描述
    这里标记一下自己踩过坑的地方:
    在这里插入图片描述

    展开全文
  • 查询表中重复数据  select * from employee where employeeId in (select employeeId from employee group by employeeId having count(employeeId) > 1) 删除表中多余的重复记录,重复记录是根据单个字段...

    查询表中重复数据 
    select * from employee where employeeId in (select employeeId from employee group by employeeId having count(employeeId) > 1)

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

    查找表中多余的重复记录(多个字段) 
    select * from employee e 
    where (e.employeeId,e.phoneNo) in (select employeeId,phoneNo from employee group by employeeId,phoneNo having count(*) > 1)

    删除表中多余的重复记录(多个字段),只留有rowid最小的记录 
    delete from employee e 
    where (e.employeeId, e.phoneNo) in (select employeeId, phoneNo from employee group by employeeId,phoneNo having count(*) > 1) 
    and rowid not in (select min(rowid) from employee group by employeeId,phoneNo having count(*)>1)

    查找表中多余的重复记录(多个字段),不包含rowid最小的记录 
    select * from employee e 
    where (e.employeeId,e.phoneNo) in (select employeeId, phoneNo from employee group by employeeId,phoneNo having count(*) > 1) 
    and rowid not in (select min(rowid) from employee group by employeeId,phoneNo having count(*)>1)

    通用:

    delete from table t 
    where (t.字段1, t.字段2, … , t.字段n) in (select 字段1, 字段2, … , 字段n from table group by 字段1, 字段2, … , 字段n having count(*) > 1)
    and rowid not in (select min(rowid) from table group by 字段1, 字段2, … , 字段n having count(*)>1)

    此外:

    如果只是查询的时候, 不显示重复, 只需select distinct 字段 from table….
    --------------------- 
    作者:关耳木 
    来源:CSDN 
    原文:https://blog.csdn.net/germoo/article/details/79960480 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • SQL删除重复数据,只保留一条用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ...

    有天这个需求需要实现

    于是我去百度

    得到如下结果:

     

    SQL:删除重复数据,只保留一条用SQL语句,删除掉重复项只保留一条在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢

     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   peopleName in (select peopleName    from people group by peopleName      having count(peopleName) > 1) and   peopleId not in (select min(peopleId) from people group by peopleName     having count(peopleName)>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)  

    6.消除一个字段的左边的第一位:

    update tableName set [Title]=Right([Title],(len([Title])-1)) where Title like '村%'

    7.消除一个字段的右边的第一位:

    update tableName set [Title]=left([Title],(len([Title])-1)) where Title like '%村'

    8.假删除表中多余的重复记录(多个字段),不包含rowid最小的记录 update vitae set ispass=-1 where peopleId in (select peopleId from vitae group by peopleId,seq having count(*) > 1) and seq in (select 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) 

     

    便选取一条

    删除表中多余的重复记录(多个字段),只留有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)

     

    由于需求实现需要五个字段便改如下:

    DELETE
    FROM
        TEMP_registration_information
    WHERE
        (
            level1options,
            level2options,
            level3options,
            level4options,
            NAME
        ) IN (
            SELECT
                level1options,
                level2options,
                level3options,
                level4options,
                NAME
            FROM
                (
                    SELECT
                        level1options,
                        level2options,
                        level3options,
                        level4options,
                        NAME
                    FROM
                        TEMP_registration_information
                    GROUP BY
                        level1options,
                        level2options,
                        level3options,
                        level4options,
                        NAME
                    HAVING
                        count(*) > 1
                ) AS tmp
        )
    AND id NOT IN (
        SELECT
            id
        FROM
            (
                SELECT
                    min(id)
                FROM
                    TEMP_registration_information
                GROUP BY
                    level1options,
                    level2options,
                    level3options,
                    level4options,
                    NAME
                HAVING
                    count(*) > 1
            ) AS temp
    )

    做了临时表

    SELECT
            id
        FROM
            (
                SELECT
                    min(id)
                FROM
                    TEMP_registration_information
                GROUP BY
                    level1options,
                    level2options,
                    level3options,
                    level4options,
                    NAME
                HAVING
                    count(*) > 1
            ) AS temp

    因为运行

    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)

    这种会报错

    因为在mysql中,不能在一条Sql语句中,即查询这些数据,同时修改这些数据

    所以增加临时表,

    但运行后,耗时太长,5,6分钟毫无停止迹象,继续运行。

    所以思考新方法,尝试对使用的5个字段增加索引,但耗时依旧5,6分钟毫无停止迹象,继续运行。

    所以继续思考

    最后想到

    DELETE
    FROM
      TEMP_registration_information
    WHERE id  IN (
      SELECT
        id
      FROM
        (
          SELECT
            min(id) id
          FROM
            TEMP_registration_information
          GROUP BY
            level1options,
            level2options,
            level3options,
            level4options,
            NAME
          HAVING
            count(*) > 1
        ) AS temp
    )

    这个语句在8万条数据下,运行时长为约20s,

    重复运行直到删除条数为0

    就可以!

    当然这种方式有些笨,本人不是专业写sql,

    所以也欢迎有更好方法可以交流,留言。

     

     

    展开全文
  • 1、查询表中重复数据。select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段...
  • 1、查询表中重复数据。select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、删除表中多余的重复记录,重复记录是根据单个字段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,948
精华内容 779
关键字:

删除表中重复数据sql