如何删除MySQL中所有重复的行(除了第一条)?

我只是碰上了这个话题。

在MySQL中删除所有重复的行,除了一条?

这几乎符合我的需求。但是我有2个表,其中包含一些(链接的)重复的行。

第一个,主表是 “消息”。首先,在我删除任何东西之前,我想选择它们。

SELECT * FROM `messages` n1, `messages` n2 WHERE n1.id > n2.id AND n1.datetime = n2.datetime AND n1.message = n2.message

第二,我有一个表 “label”,其中的行有自己的id, 但也有一个链接指向第一个表,也就是meto。所以,mail.id = labels.mordin

所述查询可以找到所有重复的记录。如何在第二个表中也显示出链接的行?

解决方案:

如果你想删除这两个表中的重复行,只保留最少的行,那么你就可以删除所有的重复行。idmessages 你应该加入 labels 到你的查询中,但只链接到属于别名表的重复记录。n1. 因此,要选择所有必须从两个表中删除的重复行。

SELECT n1.*, l.*
FROM messages n1 
INNER JOIN messages n2 
ON n1.id > n2.id AND n1.datetime = n2.datetime AND n1.message = n2.message
INNER JOIN labels l
ON l.msgid = n1.id;

并从两个表中删除重复的记录。

DELETE n1, l 
FROM messages n1 
INNER JOIN messages n2 
ON n1.id > n2.id AND n1.datetime = n2.datetime AND n1.message = n2.message
INNER JOIN labels l
ON l.msgid = n1.id;

请看一个简化的 演示.

给TA打赏
共{{data.count}}人
人已打赏
未分类

用python对单词列表进行排序

2022-9-11 12:17:35

未分类

Undefind withoutExceptionHandling()

2022-9-11 12:17:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索