【发布时间】:2020-02-25 17:47:42
【问题描述】:
我需要一些帮助来了解如何从我的数据库表中删除重复记录。我有一个包含 100 万条记录的表,已在 2 年内收集,因此有许多记录需要删除,因为它们已被多次添加到数据库中。
以下是我根据我为重复匹配的三列编写的查询,进行计数,我还添加了其中一列的长度,因为这将确定我是删除所有记录还是只删除重复。
SELECT
Ref_No,
End_Date,
Filename,
count(*) as cnt,
length(Ref_No)
FROM
master_table
GROUP BY
Ref_No,
End_Date,
Filename,
length(Ref_No)
HAVING
COUNT(*) > 1
;
这会给我一个如下输出:
Ref_No | End_Date | Filename | cnt | length(Ref_No)
05011384 | 2018-07-01 | File1 | 2 | 8
1234 | 2018-12-31 File2 | 11 | 4
1000002975625 | 2018-12-31 | File3 | 13
123456789123456789 | 2019-02-06 | File3 | 18
现在我有一个基于长度列要遵循的规则列表,这将确定我是否将记录与重复项保持原样,删除重复项或删除所有记录,这就是我卡住的地方。
我的规则如下:
如果长度在 0 到 4 之间 - 保留所有重复记录
如果长度在 5 到 10 之间 - 删除重复项,保留 1 条记录
如果长度等于 13 - 删除重复项,保留 1 条记录
如果长度为 11、12、14-30 - 删除所有记录
如果有人能就我如何完成这项任务提供建议,我将不胜感激。
谢谢。
【问题讨论】:
-
表中是否有主键,可以区分“重复”行吗?
-
SELECT ROW_NUMBER, * FROM master_Table WHERE((length(Ref_No) between 5 and 10 or length(Ref_no)=13) and row_number>1) or (length(Ref_no) in (11,12) or length(Ref_no)>=14这将选择您认为可以删除的所有记录,要在 MySQL 中获取 ROW_NUMBER,请参阅:stackoverflow.com/questions/1895110/row-number-in-mysql -
嗨,Paul,有一个主键,它是一个 ID 列。我也有索引的结束日期列。
-
嗨 Luuk,尝试了查询,但我猜我有 5.7 版,ROW_NUMBER 不起作用。将通过您提到的链接。
标签: mysql