从MYSQL中的表中删除重复的电子邮件地址

faw*_*wad 4 mysql duplicate-removal

我有与列的表格ID,firstname,lastname,address,email等.

有没有办法email从TABLE中删除重复的地址?

其他信息(来自评论):

如果有两行具有相同email地址的人会拥有一个正常的firstnamelastname,但其它的就没有"即时"firstname.因此我可以区分它们.我只想删除名字为'instant'的那个.

注意,一些记录firstname='Instant'只有1个email地址.我不想只删除一个唯一的电子邮件地址,所以我不能只删除其中的所有内容firstname='Instant'.

请帮帮我.

小智 8

DELETE n1 FROM customers n1, customers n2 WHERE n1.ID > n2.ID AND n1.email = n2.email
Run Code Online (Sandbox Code Playgroud)


Ish*_*tar 5

DELETE FROM table WHERE id NOT IN (SELECT MIN(id) FROM table GROUP BY email)
Run Code Online (Sandbox Code Playgroud)

这会为每封电子邮件保留最低的、第一个插入的 ID。


for*_*rir 0

我不知道这是否适用于 MYSQL(我没有使用过)...但是您应该能够执行类似以下代码片段的操作。

我建议您运行它们,以了解是否选择了正确的数据。如果它确实有效,那么您可能想在该列上创建约束。

获取所有重复的电子邮件地址:

SELECT 
    EMAILADDRESS, COUNT(1)
FROM
    TABLE
GROUP BY EMAILADDRESS
HAVING COUNT(1) > 1
Run Code Online (Sandbox Code Playgroud)

然后从中确定 ID:

SELECT
    ID
FROM 
    TABLE
WHERE 
    EMAILADDRESS IN (
        SELECT 
            EMAILADDRESS
        FROM
            TABLE
        GROUP BY EMAILADDRESS
        HAVING COUNT(1) > 1
    )
Run Code Online (Sandbox Code Playgroud)

最后,根据上述和其他约束删除行:

DELETE 
FROM 
    TABLE
WHERE
    ID IN (
        SELECT
            ID
        FROM 
            TABLE
        WHERE 
            EMAILADDRESS IN (
                SELECT 
                    EMAILADDRESS
                FROM
                    TABLE
                GROUP BY EMAILADDRESS
                HAVING COUNT(1) > 1
            )
    )  
    AND FIRSTNAME = 'Instant'
Run Code Online (Sandbox Code Playgroud)

  • **注意**,如果您没有OP具有的“即时”标志,这实际上会删除原始文件。如果您没有其他方法来判断哪个是“重复”记录,那么这将无助于您进行重复数据删除。 (5认同)