刪除數據表中相同的記錄!

一個表abc結構:
  aa   bb   cc  //字段
-------------------- //值
 aa    bb   cc1
 aa    bb   cc2
 aa    bb   cc3
....................
從表結構可以看出有CC字段的數據是不同的,這個很重要。

1.帶條件參數的情況
在oracle中:
delete from abc where cc in (select cc from abc where aa = 'aa' minus (select cc from abc where aa = 'aa' and rownum <= 1)) and aa = 'aa';
在sql server中:
delete from abc where cc in (select cc from abc where aa = 'aa' and cc not in(select top 1 cc from abc where aa = 'aa')) and aa = 'aa';
2.不帶參數的情況
oracle:
delete from abc t
where rowid not in (select max(rowid) from abc t1 where t.aa = t1.aa and t.bb = t1.bb)
這裏少了CC字段的關聯
mssqlserver:
最好建立一列ID自動編號的字段,使用方法跟oracle基本一樣。因爲MSSQL中沒有自帶類似ROWID的關鍵字。

這種情況是刪除字段aa相同而其他某個字段不同的方法,如果是每個字段都相同多條記錄的刪除方法又該是怎麼呢?
表結構:
  aa   bb   cc  //字段
-------------------- //值
 aa    bb   cc
 aa    bb   cc
 aa    bb   cc
....................
oracle做法:
delete from abc t
where rowid not in (select max(rowid) from abc t1 where t.aa = t1.aa and t.bb = t1.bb and t.cc = t1.cc)
主要運用了rowid關鍵字
ms sql server做法:
最好建立一列ID自動編號的字段,使用方法跟oracle基本一樣。因爲MSSQL中沒有自帶類似ROWID的關鍵字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章