Oracle數(shù)據(jù)庫(kù)保留一條數(shù)據(jù),刪除其余重復(fù)數(shù)據(jù)

在工作中遇到一個(gè)只保留一條數(shù)據(jù),刪除其余重復(fù)數(shù)據(jù)的問(wèn)題,特此記錄一下。
qx_ry_gw(人員與崗位的關(guān)系表)中,主要有ry_dm(人員代碼)gw_dm(崗位代碼)字段。

ry_dm(人員代碼) gw_dm(崗位代碼) lrrq(錄入日期) lrr_dm(錄入人代碼)
ry1 gw1 2023-05-23 1
ry1 gw1 2023-05-23 1
ry2 gw1 2023-05-23 1
ry2 gw2 2023-05-23 1
ry2 gw3 2023-05-23 1
ry2 gw3 2023-05-23 1
ry2 gw3 2023-05-23 1

可以看到,表中有幾條重復(fù)數(shù)據(jù),現(xiàn)在要對(duì)重復(fù)數(shù)據(jù)進(jìn)行去重,但是要保留一條數(shù)據(jù)。
刪除后的數(shù)據(jù)應(yīng)該是這樣:

ry_dm(人員代碼) gw_dm(崗位代碼) lrrq(錄入日期) lrr_dm(錄入人代碼)
ry1 gw1 2023-05-23 1
ry2 gw1 2023-05-23 1
ry2 gw2 2023-05-23 1
ry2 gw3 2023-05-23 1

那么刪除的SQL可以這樣寫(xiě):

delete from qx_ry_gw t 
where (t.ry_dm,t.gw_dm) in 
(select a.ry_dm,a.gw_dm from qx_ry_gw a 
group by a.ry_dm,a.gw_dm 
having count(*) > 1) 
and rowid not in 
(select min(rowid) from qx_ry_gw b 
group by b.ry_dm,b.gw_dm 
having count(*) > 1);

SQL解析:

  1. 根據(jù)ry_dm(人員代碼)gw_dm(崗位代碼),篩選出重復(fù)數(shù)據(jù);

(t.ry_dm,t.gw_dm) in (select a.ry_dm,a.gw_dm from qx_ry_gw a group by a.ry_dm,a.gw_dm having count(*) > 1)

  1. 排除rowid最小的數(shù)據(jù);

and rowid not in (select min(rowid) from qx_ry_gw b group by b.ry_dm,b.gw_dm having count(*) > 1)

  1. 刪除篩選后的數(shù)據(jù)。

delete from qx_ry_gw t

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容