首頁 >資料庫 >mysql教程 >如何從沒有主鍵的 SQL 表中刪除重複行?

如何從沒有主鍵的 SQL 表中刪除重複行?

Susan Sarandon
Susan Sarandon原創
2025-01-05 16:53:40551瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn