faw*_*wad 4 mysql duplicate-removal
我有与列的表格ID,firstname,lastname,address,email等.
有没有办法email从TABLE中删除重复的地址?
其他信息(来自评论):
如果有两行具有相同email地址的人会拥有一个正常的firstname和lastname,但其它的就没有"即时"的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)
DELETE FROM table WHERE id NOT IN (SELECT MIN(id) FROM table GROUP BY email)
Run Code Online (Sandbox Code Playgroud)
这会为每封电子邮件保留最低的、第一个插入的 ID。
我不知道这是否适用于 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)