Oracle刪除重複記錄只保留一條資料的幾種方法
阿新 • • 發佈:2018-11-11
1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
SELECT
*
FROM
people
WHERE
peopleid IN (
SELECT
peopleid
FROM
people
GROUP BY
peopleid
HAVING
COUNT (peopleid) > 1
)
2、刪除表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
DELETE FROM people WHERE peopleid IN ( SELECT peopleid FROM people GROUP BY peopleid HAVING COUNT (peopleid) > 1 ) AND ROWID NOT IN ( SELECT MIN (ROWID) FROM people GROUP BY peopleid HAVING COUNT (peopleid) > 1 )
3、查詢表中多餘的重複記錄(多個欄位)
SELECT
*
FROM
vitae A
WHERE
(A .peopleid, A .seq) IN (
SELECT
peopleid,
seq
FROM
vitae
GROUP BY
peopleid,
seq
HAVING
COUNT (*) > 1
)
4、刪除表中多餘的重複記錄(多個欄位),只留有rowid最小的記錄
DELETE FROM vitae A WHERE (A .peopleid, A .seq) IN ( SELECT peopleid, seq FROM vitae GROUP BY peopleid, seq HAVING COUNT (*) > 1 ) AND ROWID NOT IN ( SELECT MIN (ROWID) FROM vitae GROUP BY peopleid, seq HAVING COUNT (*) > 1 )
5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄
SELECT * FROM vitae A WHERE (A .peopleid, A .seq) IN ( SELECT peopleid, seq FROM vitae GROUP BY peopleid, seq HAVING COUNT (*) > 1 ) AND ROWID NOT IN ( SELECT MIN (ROWID) FROM vitae GROUP BY peopleid, seq HAVING COUNT (*) > 1 )