精华内容
下载资源
问答
  • SQL查询语句去除重复行

    千次阅读 2021-01-21 03:48:03
    1.存在两条完全相同的纪录 这是最简单的一种情况,用关键字distinct就可以去掉 select ...------------------------------------------ 引自: sql查询语句去除重复列()【http://blog.knowsky.com/234240.htm】

    1.存在两条完全相同的纪录

    这是最简单的一种情况,用关键字distinct就可以去掉

    select distinct * from table(表名) where (条件)

    2.存在部分字段相同的纪录(有主键id即唯一键)

    如果是这种情况的话用distinct是过滤不了的,这就要用到主键id的唯一性特点及group by分组

    select * from table where id in (select min(id) from table group by [去除重复的字段名列表,....])

    [取重复的第一行]

    或者

    select * from table where id in (select max(id) from table group by [去除重复的字段名列表,....])

    [取重复的最后一行]

    3.没有唯一键ID

    select identity(int,1,1) as id,* into newtable(临时表) from table

    select * from newtable where id in (select min(id) from newtable group by [去除重复的字段名列表,....])

    drop table newtable

    扩展:

    1、identity(int,1,1) ——从1开始,每次递增1

    2、SELECT INTO 语句 —— SELECT * INTO new_table_name [IN externaldatabase] FROM old_tablename

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

    引自:

    sql查询语句去除重复列(行)【http://blog.knowsky.com/234240.htm】

    展开全文
  • 海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复?如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重:delete from ...

    海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复?

    如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一直使用这条语句进行去重:

    delete from 表 where id not in  (select max(id) from 表 group by mobilePhone,officePhone,email )  or delete from 表 where id not in   (select min(id) from 表 group by mobilePhone,officePhone,email ) delete from 表 where id not in (select max(id) from 表 group by mobilePhone,officePhone,email ) or delete from 表 where id not in (select min(id) from 表 group by mobilePhone,officePhone,email )

    其中下面这条会稍快些。上面这条数据对于100万以内的数据效率还可以,重复数1/5的情况下几分钟到几十分钟不等,

    但是如果数据量达到300万以上,效率骤降,如果重复数据再多点的话,常常会几十小时跑不完,有时候会锁表跑一夜都跑不完。

    无奈只得重新寻找新的可行方法,今天终于有所收获:

    //查询出唯一数据的ID,并把他们导入临时表tmp中  select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email   //查询出去重后的数据并插入finally表中  insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp) //查询出唯一数据的ID,并把他们导入临时表tmp中 select min(id) as mid into tmp from 表 group by mobilePhone,officePhone,email //查询出去重后的数据并插入finally表中 insert into finally select (除ID以外的字段) from customers_1 where id in (select mid from tmp)

    效率对比:用delete方法对500万数据去重(1/2重复)约4小时。4小时,很长的时间。

    用临时表插入对500万数据去重(1/2重复)不到10分钟。

    其实用删除方式是比较慢的,可能是边找边删除的原因吧,而使用临时表,可以将没有重复的数据ID选出来放在临时表里,再将表的信息按临时表的选择出来的ID,将它们找出来插入到新的表,然后将原表删除,这样就可以快速去重啦。

    SQL语句去掉重复记录,获取重复记录

    按照某几个字段名称查找表中存在这几个字段的重复数据并按照插入的时间先后进行删除,条件取决于order by 和row_num。

    方法一按照多条件重复处理:

    delete tmp from(  select row_num = row_number() over(partition by 字段,字段 order by 时间 desc)   from 表 where 时间> getdate()-1   ) tmp   where row_num > 1 delete tmp from( select row_num = row_number() over(partition by 字段,字段 order by 时间 desc) from 表 where 时间> getdate()-1 ) tmp where row_num > 1

    方法二按照单一条件进行去重:

    delete from 表 where 主键ID not in(  select max(主键ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=1   ) delete from 表 where 主键ID not in( select max(主键ID) from 表 group by 需要去重的字段 having count(需要去重的字段)>=1 )

    展开全文
  • 第一个假如有一个数据表sm_movies里面有重复的电影想去掉重复的并且保存一个movies_id值最大的那一个DELETEFROM`sm_movies`WHEREmovies_idNOTIN(SELECT*FROM(SELECTMAX(movies_id)asmovies_idFROM`sm_movies`...

    第一个

    假如有一个数据表sm_movies

    a80666c6db05c7994ef92b1c34923469.png

    里面有重复的电影想去掉重复的并且保存一个movies_id值最大的那一个DELETE FROM `sm_movies` WHERE movies_id NOT IN

    (

    SELECT * FROM (

    SELECT MAX(movies_id) as movies_id FROM `sm_movies` GROUP BY title

    ) AS tmp

    );

    首先使用下面语句查出来重复的title记录,并从每组中取中movies_id最大的那个idSELECT MAX(movies_id) FROM `sm_movies` GROUP BY title

    然后用 not in把查出来的movies_id排除掉,剩下的就是要删除的记录

    第二个

    如下图

    8df48dc162c1ce6401535a490bb9cf53.png

    里面有很多重复的项重复的条数还不固定  本来short_id应该是不能重复的

    想实现的是让short_id 唯一 其它的都删除掉 只留下一个  user_id 字段值最大的出来delete from user

    where   short_id in ( select short_id from (select short_id    from kl_user group by short_id      having count(short_id) > 1) as tem)

    and     user_id not in (select user_id from (select MAX(user_id) as user_id from kl_user group by short_id     having count(short_id)>1) as temp )

    可以看到语句有两个条件

    条一个条件把 short_id 这个字段有重复的取出来

    第二个条件从重复的short_id中把user_id值最大的那一条取出来,把这一条除外,这样删除的时候就留下来啦

    展开全文
  • sql语句查询重复的数据

    千次阅读 2021-05-19 09:50:15
    查找所有重复标题的记录: SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一。查找重复记录 1。查找全部重复记录 Select * From 表 Where 重复...

    查找所有重复标题的记录:

    SELECT *
    FROM t_info a
    WHERE ((SELECT COUNT(*)
    FROM t_info
    WHERE Title = a.Title) > 1)
    ORDER BY Title DESC

    一。查找重复记录

    1。查找全部重复记录

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

    2。过滤重复记录(只显示一条)

    Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)

    注:此处显示ID最大一条记录

    二。删除重复记录

    1。删除全部重复记录(慎用)

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

    2。保留一条(这个应该是大多数人所需要的 _

    Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)

    注:此处保留ID最大一条记录

    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)

    补充:

    有两个以上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如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 COUNT(*) from HB_BORROWER_INFORMATION awhere (a.APPLICATION_CODE) in (select APPLICATION_CODE from HB_BORROWER_INFORMATION group by ...
  • delete from table where rowid not in (select max(r由热心网友提供的答案1:大家说的没错,只需要一个循环就了,因为你的数据都是一样,只要控制循环,执行1000次就好了。比防采集。delete Emp p where rowid in...
  • select * into tmp_lzw1 From tb_sc_user_cz200905 a where exists (select * From dhhm b where b.col001=a.servnumber)select servnumber,max(chgamt) as chamt,recdate into tmp_lzw2 from tmp_lzw1 where chgamt...
  • Oracle查询并删除重复记录的SQL语句2010-07-20 00:00出处:中国IT实验室作者:佚名【我要评论】 [导读]查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断。企业软件热点文章Java调用Dll存在指针或...
  • 查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select * from peoplewhere peopleId in (select peopleId from people group by peopleId having count(peopleId) ...
  • MYSQL用一条SQL语句删除重复记录MYSQL不支持如下语句:delete from t_user where id in(select max(id) as id from t_user group by username );MYSQL用以下词句就可以:delete t_user from t_user , (select id ...
  • 我们经常会碰到需要删除数据表中重复记录,下面我来总结了几种能删除重复记录并助相对来讲效率是非常不错的,有需要了解的朋友可进入参考。创建一个表用来存放,要删除的记录的id信息:代码如下复制代码CREATE TABLE ...
  • 展开全部查询可32313133353236313431303231363533e58685e5aeb931333337613931用group by语句删除则用delete语句。1、创建测试表,插入测试数据:createtabletest(idint,namevarchar2(20));insertintotestvalues(1,...
  • 在数据开发时我们常常会需要把数据库中重复的记录查出来或直接删除数据库中重复记录,下面我来给大家总结一些方法,有需要的朋友可参考。常用的语句1、查找表中多余的重复记录,重复记录是根据单个字段(mail_id)来...
  • 一、问题描述数据表如下图上述是ecshop中的商品表(ecs_goods),远程采集数据时,由于采集代码写的不够严谨,导致sku_id,goods_sn,goods_name三个字段中的数据出现了大量重复。二、数据处理过程中出现的错误...
  • 前言: having子句只用在分组查询(group by)条件下,用作分组查询结果的条件过滤 去除重复数据,只保留一条重复的数据 DELETE FROM `user` WHERE name IN ( SELECT name FROM ( SELECT name FROM
  • 重复表为A,临时表为temp //新建一张临时表存单份不重复数据 create table temp as select DISTINCT * from A ; //清空原表内容 delete from A; //把数据重新插入原表 ...//删除临时表 drop table temp; ...
  • 概括:在这个教程中,你将会学到多种用在 MySQL 中的删除重复行的方法。一、准备样本数据为了便于演示,我们用下面的脚本创建了表 contacts,并向其中插入了一些样本数据。DROP TABLE IF EXISTS contacts;CREATE ...
  • 原答案:专 sql server环境属下: select ID,SN,CreateDate,dayUse from ( select ID,SN,CreateDate,dayUse, row_number() over(partition by SN,CreateDate order by dayUse desc) as RowNum from ...
  • SQL语句添加删除修改字段

    千次阅读 2021-02-02 06:00:42
    SQL语句添加删除修改字段1.增加字段alter table docdsp add dspcode char(200)2.删除字段ALTER TABLE table_NAME DROP COLUMN column_NAME3.修改字段类型ALTER TABLE table_name ALTER COLUMN column_name new_...
  • SQL SELECT DISTINCT 语句语法:SELECT DISTINCT 列名称 FROM 表名称使用 DISTINCT 关键词如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:SELECT Company FROM Orders如需从 Company" 列中仅选取...
  • '4' UNION ALL SELECT 'ccc','5' -->SQL查询如下: SELECT name = CASE [value] WHEN ( SELECT MIN([value]) FROM tb WHERE name = t.name ) THEN name ELSE '' END, [value] FROM [tb] t /* name value ---------- -...
  • SQL语句添加删除修改字段

    千次阅读 2021-01-19 04:48:45
    SQL语句添加删除修改字段1.增加字段alter table docdsp add dspcodechar(200)2.删除字段ALTER TABLE table_NAME DROP COLUMNcolumn_NAME3.修改字段类型ALTER TABLE table_name ALTER COLUMNcolumn_name new_data_...
  • mysql批量删除sql语句

    千次阅读 2021-02-02 09:55:42
    30种mysql优化sql语句查询的方法_计算机软件及应用_IT/计算机_专业资...简要介绍基础语句: 1、说明:创建数据库 CREATE DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份 sql server --...
  • 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除重复的呢 1、查找表中多余的重复记录,重复记录是根据单个字段(code)来判断 select * from MLTY_MDM_PRODUCT where code in (select code from MLTY_MDM...
  • 1.查找重复SELECT * FROM blog_user_relation a WHERE (a.account_instance_id,a.follow_account_instance_id)IN (SELECT account_instance_id,follow_account_instance_id FROM blog_user_relation GROUP BY ...
  • 下面先来看看例子:tableid name1 ...select *, count(distinct name) from table group by name结果:id name count(distinct name)1 a 12 b 13 c 1最后一 项是多余的,不用管就了tp2.0手册 搜索连贯操作 可看到...
  • sql server ql语句删除外键和删除alter table tablename add constraint ordersrelationshipforeign key mployeeidreferences employees (employeeid)on delete cascadeon update cascadealter...
  • 1.如何用SQL语句把一个表里面某字段内有相同的记录查询出来现在有一个表 有三列 分别是tel,name,addr我现在要查询name一样的具体T-SQL语句要怎么写 求助就是name这个列有很多记录在数据库里面 这些人有很多哈 就是...
  • 根据单个字段(title)查找表中多余的重复记录 select * from article where title in (select title from article group by title having count(title) > 1) 根据多个字段查找表中多余的重复记录 select *...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 228,399
精华内容 91,359
关键字:

sql语句删除重复行