oracle数据库下
如果记录数不多可以使用下面的查询
delete from TAB_NAME a where arowid <> (select max(rowid) from TAB_NAME b where bCOL1 = aCOL1);
括号中的where后,你可以加入所有字段相等
bCOL2 = aCOL2 and bCOL3 = aCOL3 ……
sqlserver下
select distinct from tableName
就可以得到无重复记录的结果集。
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除
select distinct into #Tmp from tableName
drop table tableName
select into tableName from #Tmp
drop table #Tmp
delete 表A where 重复的列名(可以是多列) in (select 重复的列名(可以是多列) from 表A group by 重复的列名(可以是多列) having (count(1)>1) ) where rowid!=(select min(rowid) from 表A group by 重复的列名(可以是多列)having (count(1)>1));
删除重复的数据,留下rowid最小的那条!
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
[sql]
select from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
[sql]
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、查找表中多余的重复记录(多个字段)
[sql]
select from vitae a
where (apeopleId,aseq) in (select peopleId,seq from vitae group by peopleId,seq having count() > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
[sql]
delete from vitae a
where (apeopleId,aseq) 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最小的记录
[sql]
select from vitae a
where (apeopleId,aseq) 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)
方法有很多,这里介绍两种
方法一、如果要保留id的最小值,例如:
数据:
执行sql:select count() as count ,name,id from ceshi group by name
&lt;img
最后要删除的sql为:delete from ceshi where id not in (select count() as count ,name,id from ceshi group by name)
如果想保留id的最大值:
简单的办法是:delete from ceshi where id not in (select count() as count ,name,id from (select from ceshi order by id desc) group by name)
如果想要删除的是两个列里面对应相同的数据,也就是说表里面有两条记录的name都是admin,要是只想保留其中一条的话,order by 的时候增加一个值即可,例如:
delete from ceshi where id not in (select count() as count ,name,id from ceshi group by name,email)
方法二、只需要把你这张表当成两张表来处理就行了。
DELETE p1 from TABLE p1, TABLE p2 WHERE p1name = p2name AND p1email = p2email AND p1id < p2id;
这里有个问题,保留最新的那一条(也就是ID最小的那个)
上面的的语句,p1id < p2id,所以获取到的是id最大的,因为p1id小于p2id就会被删除,只有最大的值不满足。如果要获取id最小的那个,只需要把'<'改成'>'即可。
当然是用group by,count可以更精准控制重复n次的情况。
单纯用SQL语句,我们可以利用自增ID列来删除有重复的第一条记录,如果数据表不含自增ID列那么就得依靠游标或应用程序端编程来解决了,因为数据库引擎搞不清楚究竟那一条记录是第一条。
下面是利用自增ID列删除t1表a列有重复的第一条记录的SQL语句示例:
delete from t1 where id in (
select min(id) from t1 group by a
having count(1)>1);
需要说明一下,删除有重复的记录中的第一条记录在逻辑上并不能保证数据表不再存在重复,因为,因为重复记录可以有无限多条而不仅仅是只有两条重复一种情况。
下面语句可以删除t1表中a列有重复的记录,对于有重复的记录只保留最新的那一条记录,让该表不再有重复:
以上就是关于数据库 两条 相同 记录 怎么 删除全部的内容,包括:数据库 两条 相同 记录 怎么 删除、数据库怎样删除多条重复数据保留一条、pgsql数据库相同的数据怎么删除只保留一条等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)