oracle数据库中如何用sql语句查出重复字段以及如何删除?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle数据库中如何用sql语句查出重复字段以及如何删除?相关的知识,希望对你有一定的参考价值。

比如我有一个表名字叫student
表有一个字段name
name字段有100万条数据 其中有很多重复数据 我如何用sql语句查出重复数据以及如何用sql语句删除重复了的数据(假设有n个name都一样 我只保留一个)

查询可用group by语句,删除则用delete语句。

1、创建测试表,插入测试数据:

create table test
(id int,
name varchar2(20));
insert into test values (1,\'张三\');
insert into test values (1,\'张三\');
insert into test values (2,\'李四\');
insert into test values (2,\'李四\');
insert into test values (3,\'王五\');
insert into test values (3,\'王五\');
insert into test values (3,\'王五\');
insert into test values (4,\'赵六\');
commit;

2、查询重复数据,用语句:

select id,name from test group by id,name having count(*)>1;

结果:

3、删除重复记录用语句:

delete from test where rowid not in (select min(rowid) from test group by id,name);
commit;
参考技术A 查询重复数据
select name,count(*) repeatNum from student group by name having repeatNum > 1
删除重复数据
DELETE tb_affiche WHERE name IN (SELECT name FROM tb_affiche GROUP BY name HAVING COUNT(*) > 1)
AND name not in(SELECT distinct name FROM tb_affiche GROUP BY name HAVING COUNT(*) > 1)
希望能够帮助到你.
参考技术B 假设有一个主键(唯一键)id

delete from student a
where exists(
select 1 from
(
select min(id) minid,name
from student
group by name
) b where a.id = b.minid and a.name <> b.name
)本回答被提问者和网友采纳
参考技术C delete from student where rowID not in(select Max(rowID) from student group by sname)

如何用SQL语句求oracle 数据库所有表的行数?

求各个表的行数, 返回的结果应该是两列, 表名和行数 多谢指教! 是一下子查出所有表的行数, 而不是一个表一个表的用SQL语句查询. select count(*) from tablename 这个语句一次只能查一个表. 是oracle里面的拉~~~

参考技术A 可以从表user_tables中查询。
select
sum(num_rows)
from
user_tables
;
就是显示用户所有表的行数其中num_rows是每个表的行数,用sum加总一下,就是当前用户所有表的
总行
数。
但因为user_tables中的数据不是
实时
统计,会有时间差,所以以上Sql统计得到的结果与实际会存在一定
误差

以上是关于oracle数据库中如何用sql语句查出重复字段以及如何删除?的主要内容,如果未能解决你的问题,请参考以下文章

sql查询中如何用group by查询出完整的一行记录?

微软的sql2005中如何用SQL语句查询出将一个表的字段的说明

在PL/SQL中如何用SQL语句查询数据库中所有表的数据数量?

Oracle中如何用一条insert into 语句插入多条数据 如: insert into 表 values(多条数据)????????

用sql语句进行多表连接查询,怎么不查出重复数据

ORACLE中如何用DBMS_OUTPUT包输出表的所有数据