2017-04-14 67 views
0

我的第一个表中有列ID,invdate和invnumber与VALUES重复数据删除:我如何从两个表中的Oracle SQL Developer

(1, 01/10/13, 1) 
(2, 02/10/13, 2) 
(2, 02/10/13, 2) 
(3, 03/10/13, 3) 
(4, 04/10/13, 4) 
(4, 05/10/13, 4) 

我的第二个表B具有列ID,DATEOFBIRTH,姓氏,与VALUES的名字:

(1, 19/06/1997, Fox, Migan) 
(2, 30/07/1993, Todd, James) 
(2, 30/07/1993, Todd, James) 
(3, 1/08/1994, Xi, Ji) 
(4, 2/07/1992, Fared, Bob) 
(4, 2/07/1992, Fared, Bob) 

我该如何使用DELETE FROM()函数删除两个表中的所有重复行?我想我应该以某种方式合并表格,然后删除重复的行,但不太确定。

至于结果,

SELECT * FROM a 

应该给:

(1, 01/10/13, 1) 
(2, 02/10/13, 2) 
(3, 03/10/13, 3) 
(4, 04/10/13, 4) 

SELECT * FROM B; 

应该给:

(1, 19/06/1997, Fox, Migan) 
(2, 30/07/1993, Todd, James) 
(3, 1/08/1994, Xi, Ji) 
(4, 2/07/1992, Fared, Bob) 

UPDATE(溶液):

DELETE FROM一个WHERE ROWID >(SELECT min(rowid)FROM b WHERE a.ID = b.ID);

有人可以为我解释这个SQL吗?

+0

编辑你的问题,并解释/执行的示例显示你想要的结果。 –

+0

您只需要在SELECT中过滤重复项或实际删除表中的重复行? –

+0

是的,我需要使用DELETE FROM(...实际上从表中删除重复的行 –

回答

1

下面是你的“B”表

从这里http://www.dba-oracle.com/t_delete_duplicate_table_rows.htm

(你可以做你的“一”表也类似)

DELETE FROM 
    b t1 
    WHERE 
    t1.rowid > 
    ANY (SELECT t2.rowid FROM b t2 
     WHERE 
      t1.id = t2.id AND t1.DATEOFBIRTH = t2.DATEOFBIRTH AND t1.lastname = t2.lastname AND t1.firstname = t2.firstname 
     ); 
+0

说0行被删除 –

+0

您的行是否真的重复? –

+0

运行查询:'select count (*)from b group by id,DATEOFBIRTH,lastname,firstname order by count(*)desc' –