首页 > 数据库 > mysql教程 > 如何从没有主键的 SQL 表中删除重复行?

如何从没有主键的 SQL 表中删除重复行?

Susan Sarandon
发布: 2025-01-05 16:53:40
原创
553 人浏览过

How to Delete Duplicate Rows from a SQL Table Without a Primary Key?

从没有主键的 SQL 表中删除重复记录

在没有主键的 SQL 表中,识别并删除重复记录可以是一项复杂的任务。当多行在特定列中共享相同的值时,就会出现问题,从而在数据中产生冗余。为了解决这个问题,我们将探索一种基于列组合有效消除重复行的查询。

考虑下表名为“employee”的给定数据:

create table employee
(
 EmpId number,
 EmpName varchar2(10),
 EmpSSN varchar2(11)
);

insert into employee values(1, 'Jack', '555-55-5555');
insert into employee values (2, 'Joe', '555-56-5555');
insert into employee values (3, 'Fred', '555-57-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
insert into employee values (1, 'Jack', '555-55-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6 ,'Lisa', '555-70-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
登录后复制

到根据“EmpId”和“EmpSSN”删除重复行,我们可以利用以下内容查询:

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM Employee) SUB
WHERE SUB.cnt > 1
登录后复制

解释:

  1. 内部查询根据分区列“EmpId”、“EmpName”和“EmpSSN”计算每行的行号。此步骤标识这些字段的每个唯一组合的行顺序。
  2. 然后,外部查询会删除行号“cnt”大于 1 的行,这表明该特定组合存在重复行。

执行此查询将有效地从“employee”表中删除重复记录,同时保留数据的原始顺序。执行后,该表将仅包含基于“EmpId”和“EmpSSN”字段的唯一行。

以上是如何从没有主键的 SQL 表中删除重复行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板