MYSQL:查找和删除类似记录 - 通过示例更新

时间:2011-11-23 03:34:18

标签: mysql duplicate-removal

我正在尝试重复删除一个表,我知道需要删除的“关闭”(但不是确切)行。

我有一个表,有22个字段,通过比较其中的5个字段可以建立唯一性。在剩余的17个字段中(包括唯一键),有3个字段导致每一行都是唯一的,这意味着重复数据删除适当的方法将不起作用。

我正在查看此处概述的多表删除方法:http://blog.krisgielen.be/archives/111但我无法理解最后一行代码(AND M1.cd * 100 + M1.track> M2.cd * 100 + M2.track)因为我不确定cd * 100部分的成就...

任何人都可以帮助我吗?我怀疑我可以更好地将整个东西导出到python,用它​​做一些事情,然后重新导入它,但然后(1)我知道如何重复删除字符串! (2)我不得不将记录分成几块,以便能够将它导入到mysql中,因为它在300秒后超时,所以它变成了一个完全进入mysql的第一步......(我是非常新手mysql和python)

该表是来自某些测试的大约40个日志文件的转储。每个日志的测试集大约是20,000个文件。重复值是测试条件,文件名/参数或测试结果。


    CREATE SHOW TABLE:

    CREATE TABLE `t1` (
     `DROID_V` int(1) DEFAULT NULL,
     `Sig_V` varchar(7) DEFAULT NULL,
     `SPEED` varchar(4) DEFAULT NULL,
     `ID` varchar(7) DEFAULT NULL,
     `PARENT_ID` varchar(10) DEFAULT NULL,
     `URI` varchar(10) DEFAULT NULL,
     `FILE_PATH` varchar(68) DEFAULT NULL,
     `NAME` varchar(17) DEFAULT NULL,
     `METHOD` varchar(10) DEFAULT NULL,
     `STATUS` varchar(14) DEFAULT NULL,
     `SIZE` int(10) DEFAULT NULL,
     `TYPE` varchar(10) DEFAULT NULL,
     `EXT` varchar(4) DEFAULT NULL,
     `LAST_MODIFIED` varchar(10) DEFAULT NULL,
     `EXTENSION_MISMATCH` varchar(32) DEFAULT NULL,
     `MD5_HASH` varchar(10) DEFAULT NULL,
     `FORMAT_COUNT` varchar(10) DEFAULT NULL,
     `PUID` varchar(15) DEFAULT NULL,
     `MIME_TYPE` varchar(24) DEFAULT NULL,
     `FORMAT_NAME` varchar(10) DEFAULT NULL,
     `FORMAT_VERSION` varchar(10) DEFAULT NULL,
     `INDEX` int(11) NOT NULL AUTO_INCREMENT,
     PRIMARY KEY (`INDEX`)
    ) ENGINE=MyISAM AUTO_INCREMENT=960831 DEFAULT CHARSET=utf8

唯一的唯一字段是PriKey,'index'。

通过查看DROID_VSig_VSPEEDNAMEPUID

,可以建立唯一记录

在-900,000行中,我有大约10,000个重复,它们是记录的单个副本,或者最多重复6次记录。


行示例:按原样

    5;"v37";"slow";"10266";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/7";"image/tiff";"Tagged Ima";"3";"191977"
    5;"v37";"slow";"10268";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/8";"image/tiff";"Tagged Ima";"4";"191978"
    5;"v37";"slow";"10269";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/9";"image/tiff";"Tagged Ima";"5";"191979"
    5;"v37";"slow";"10270";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/10";"image/tiff";"Tagged Ima";"6";"191980"
    5;"v37";"slow";"12766";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/7";"image/tiff";"Tagged Ima";"3";"193977"
    5;"v37";"slow";"12768";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/8";"image/tiff";"Tagged Ima";"4";"193978"
    5;"v37";"slow";"12769";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/9";"image/tiff";"Tagged Ima";"5";"193979"
    5;"v37";"slow";"12770";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/10";"image/tiff";"Tagged Ima";"6";"193980"

行示例:因为它应该是

    5;"v37";"slow";"10266";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/7";"image/tiff";"Tagged Ima";"3";"191977"
    5;"v37";"slow";"10268";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/8";"image/tiff";"Tagged Ima";"4";"191978"
    5;"v37";"slow";"10269";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/9";"image/tiff";"Tagged Ima";"5";"191979"
    5;"v37";"slow";"10270";;"file:";"V1-FL425817.tif";"V1-FL425817.tif";"BINARY_SIG";"MultipleIdenti";"20603284";"FILE";"tif";"2008-11-03";;;;"fmt/10";"image/tiff";"Tagged Ima";"6";"191980"

请注意,您可以从最后的索引列中看到我已经删除了其他一些行 - 我只识别了一小组重复行。如果您需要其他数据库的“噪音”,请告诉我

感谢。

1 个答案:

答案 0 :(得分:1)

我想出了一个修复 - 使用count函数,我使用COUNT(*)只返回表中的所有内容,使用COUNTdistinct NAME)函数我能够清除符合dup critera的dup行(由WHERE子句中的字段选择所列出)

示例:

SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, COUNT(distinct NAME) as Hit FROM sourcelist, main_small WHERE sourcelist.SourcePUID = 'MyVariableHere' AND main_small.NAME =  sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` ASC, `SPEED`;