1. 程式人生 > >Oracle刪除重複記錄只保留一條資料的幾種方法

Oracle刪除重複記錄只保留一條資料的幾種方法

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
)