我知道可以使用以下示例表单中的ROWID
从表中删除重复项:
DELETE FROM TABLE_NAME
WHERE ROWID IN
(SELECT
MIN(ROWID)
FROM TABLE_NAME
WHERE ...
GROUP BY COLUMN_NAME_1, COLUMN_NAME_2, etc. )
我想知道是否可以对出现超过 2 次的条目执行此操作。如果没有,还有其他方法可以做吗?
我不会使用not in
,甚至不会使用min
或max
。我通常使用类似的东西
delete demo where rowid in
( select lead(rowid) over(partition by your_grouping_column order by col1, col2)
from demo )
lead(rowid)
按col1, col2
顺序返回所有"下一个"rowid。每个your_grouping_column
的第一行(无论是什么(都不会在该列表中。
如果要保留最新的 rowid
您可以按所有列使用 NOT IN for max(rowid( 组
DELETE FROM TABLE_NAME
WHERE ROWID NOT IN
(SELECT
MAX(ROWID)
FROM TABLE_NAME
WHERE...
GROUP BY COLUMN_NAME_1, COLUMN_NAME_2, etc. )
我不知道以下是否是一个有效的答案。如果是这样,请告诉我。
假设Table_V1
是包含重复项的那个,我创建了它的第二个版本,其中包括原始数据旁边的重复项计数
CREATE TABLE Table_V2 AS (
SELECT
A.*,
B.CNT
FROM Table_V1 A
LEFT JOIN
(SELECT * FROM (SELECT COL1, COL2, COUNT(COL1) AS CNT FROM Table_V1 GROUP BY COL1,
COL2) WHERE CNT>1) B
ON A.COL1 = B.COL1 AND A.COL2 = B.COL2);
然后我使用以下行删除重复/三份/四份等:
DELETE FROM Table_V2 WHERE CNT IS NOT NULL
AND ROWID NOT IN (
SELECT MAX (ROWID)
FROM Table_V2
WHERE CNT IS NOT NULL
GROUP BY COL1, COL2);