删除MySQL中的重复行

时间:2017-04-07 13:51:38

标签: mysql sql

在我的数据库中,我有~67 000行,但我有12k个重复行和不同的键。

我想删除重复项并只保存一行。

表名:seb_societe

类似专栏:nom,phone,adress,zip

我尝试了这个,但它不起作用:

DELETE
FROM seb_societe AS T
WHERE  T.rowid < ANY (SELECT rowid
                FROM seb_societe AS T2
                WHERE  T.rowid <> T2.rowid
                  AND  T.nom = T2.nom
                  AND  T.address = T2.address);

任何人都可以告诉我为什么我的尝试不起作用,或者如何达到我想要的结果。

5 个答案:

答案 0 :(得分:5)

delete
from seb_societe
where exists
    (
    select *
    from
        (
        select 1
        from seb_societe t2
        where t2.row_id > row_id
        and nom = T2.nom
        and address = T2.address
        ) x1
    )

答案 1 :(得分:2)

您可以在加入时使用删除:

delete s
from seb_societe s
join (
    select nom,
        address,
        max(rowid) as max_rowid
    from seb_societe
    group by nom,
        address
    ) t on s.nom = t.nom
    and s.address = t.address
    and s.rowid <> t.max_rowid;

答案 2 :(得分:2)

DELETE t1 FROM 
    seb_societe t1 LEFT JOIN seb_societe t2 ON 
    t1.nom = t2.nom AND t1.address = t2.address
WHERE t1.row_id < t2.row_id;

首先尝试备份......

这应该留下具有重复项的最高row_id的行。

答案 3 :(得分:1)

DELETE T FROM seb_societe T,seb_societe T2 WHERE T.rowid&lt; T2.rowid AND T.nom = T2.nom AND T.address = T2.address;

答案 4 :(得分:0)

问题解决了。我使用PHP脚本删除重复行:

global $dbh;
$query='SELECT rowid, nom FROM seb_societe GROUP BY `nom`, `address` HAVING COUNT(*) > 1';
$query = $dbh->query($query);
$i = 0;

$retour=array();

while($resultat = $query->fetch()) {
    $rowid = $resultat['rowid'];
    $suppression = $dbh->exec('DELETE FROM seb_societe WHERE rowid = '.$rowid); 
}

之前,我使用外键删除其他表中的所有行。

感谢所有人的回复。