MySQL基于主键和列删除除一个值以外的所有值
我的桌子MySQL基于主键和列删除除一个值以外的所有值,mysql,duplicate-removal,Mysql,Duplicate Removal,我的桌子 id userid emailid ---+---------+------------ 1 | 1 | a@a.com 2 | 1 | b@b.com 3 | 123 | a@a.com 4 | 123 | b@b.com 5 | 123 | c@c.com 6 | 123 | c@c.com 所需结果 id userid emailid ---+--------
id userid emailid
---+---------+------------
1 | 1 | a@a.com
2 | 1 | b@b.com
3 | 123 | a@a.com
4 | 123 | b@b.com
5 | 123 | c@c.com
6 | 123 | c@c.com
所需结果
id userid emailid
---+---------+------------
1 | 1 | a@a.com
2 | 1 | b@b.com
3 | 123 | a@a.com
4 | 123 | b@b.com
5 | 123 | c@c.com
但是我越来越
id userid emailid
---+---------+------------
1 | 1 | a@a.com
2 | 1 | b@b.com
6 | 123 | c@c.com
我尝试过(我是SQL新手)
试试这个
查询
我花了3个小时写测试查询和搜索stackoverflow。你提到的链接有一个错误的答案,我发现,除非我还包括和n1.id n2.id,否则它会删除表中的每一行。我不明白它是怎么得到218票的!大多数其他答案要求我更改表的定义方式,或者没有显示如何删除。对于我的问题,我最接近的答案是我在上面的“我试过…”下面贴了什么,直到乌拉斯在下面回答。
DELETE FROM table
WHERE id NOT IN (SELECT *
FROM (SELECT MIN(n.id)
FROM table n GROUP BY n.emailid) x)
DELETE FROM table_name
WHERE id NOT IN
(
SELECT MIN(id)
FROM table_name
GROUP BY userid,emailid
);