如何删除Oracle数据库中的重复记录?
要删除重复记录,我们需要首先找到所有不同的记录。在重复记录中,除了 row_id之外的所有数据都相同,因为 row_id 是记录占用的物理地址。因此,我们找到每个列中数据不同的不同行 id,然后删除所有不在上述查询中的具有 row_id 的行。
在这里我们将看到,如何在 Oracle 中删除重复记录。出于演示的目的,我们将创建一个表格演示。
创建数据库:
首先,我们创建一个表并在其中填充数据,其中一些记录是重复的:
询问:
CREATE TABLE Demo( PersonID int, LastName varchar(255), FirstName varchar(255));
INSERT INTO Demo VALUES (1, 'Geek1', 'Geeksforgeeks');
INSERT INTO Demo VALUES (2, 'Geek2', 'Geeksforgeeks');
INSERT INTO Demo VALUES (3, 'Geek3', 'Geeksforgeeks');
INSERT INTO Demo VALUES (1, 'Geek1', 'Geeksforgeeks');
INSERT INTO Demo VALUES (2, 'Geek2', 'Geeksforgeeks');
INSERT INTO Demo VALUES (2, 'Geek2', 'Geeksforgeeks');
输出:
现在,我们将使用以下方法找到所有没有重复行的不同记录:
询问:
SELECT * FROM Demo
WHERE rowid IN
( SELECT MAX(rowid)
FROM Demo
GROUP BY PersonID, LastName, FirstName);
输出:
现在。使用以下命令删除不在上述查询中的所有具有 rowid 的行:
询问:
DELETE Demo
WHERE rowid NOT IN
(SELECT MAX(rowid)
FROM Demo
GROUP BY PersonID, LastName, FirstName);
输出:
删除重复项的最终表如下: