2017-04-14 62 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' –