一個表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的關鍵字。