处理没有主键的 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');
给定此表,目标是删除重复记录,同时保留独特的。为了实现这一点,我们可以使用“ROW_NUMBER()”函数和“DELETE”语句的组合:
DELETE SUB FROM (SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt FROM Employee) SUB WHERE SUB.cnt > 1
分解代码:
通过执行此查询,“employee”表中的重复记录将被删除,只留下唯一的记录:
select * from employee; EmpId EmpName EmpSSN 1 Jack 555-55-5555 2 Joe 555-56-5555 3 Fred 555-57-5555 4 Mike 555-58-5555 5 Cathy 555-59-5555 6 Lisa 555-70-5555
以上是如何从没有主键的SQL表中删除重复记录?的详细内容。更多信息请关注PHP中文网其他相关文章!