首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql删除重复注释?

Mysql删除重复注释?
EN

Stack Overflow用户
提问于 2015-02-01 18:45:23
回答 2查看 171关注 0票数 1

我想清理注释表(1M行)上重复的内容,在这些表中,用户发布了两次(或更多)相同的评论。然而,我想保留任何重复评论的一个例子。

下面是我提出的查询,查找这些注释并将其分组:

代码语言:javascript
复制
SELECT author, body, COUNT(*) as count
FROM  db.comment
GROUP BY body
HAVING COUNT(*) > 1;

但不知道如何删除重复的行,同时只保留一个未被触及的行。我也见过类似的问题,但没有一个对我有用。所以感谢你的暗示。

更新:

代码语言:javascript
复制
mysql> describe comment;
+---------+-------------+------+-----+---------+----------------+
| Field   | Type        | Null | Key | Default | Extra          |
+---------+-------------+------+-----+---------+----------------+
| id      | int(11)     | NO   | PRI | NULL    | auto_increment |
| created | datetime    | NO   |     | NULL    |                |
| author  | varchar(60) | NO   |     | NULL    |                |
| body    | longtext    | NO   |     | NULL    |                |
| post_id | int(11)     | NO   | MUL | NULL    |                |
+---------+-------------+------+-----+---------+----------------+
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-01 18:49:00

与其他数据库管理系统不同,MySQL可以从表中选择所有字段,但只按其中一个字段进行分组。在这种情况下,将只选择每个组的第一个记录。

分两步完成这项工作:

保存ID以保留在临时表中:

代码语言:javascript
复制
INSERT INTO temp_comment(id)
SELECT id
FROM db.comment
GROUP BY author, body

删除除保存的行外的所有行:

代码语言:javascript
复制
DELETE FROM db.comment WHERE id NOT IN (SELECT id FROM temp_comment);

当然,您需要temp_comment表才能存在。

票数 1
EN

Stack Overflow用户

发布于 2015-02-01 19:42:25

这是你想要的吗?

代码语言:javascript
复制
SELECT * FROM comments WHERE id NOT IN (
  SELECT id
  FROM  comments
  GROUP BY author,body
  HAVING COUNT(*) > 1
 )
AND author IN(
  SELECT author
  FROM  comments
  GROUP BY author,body
  HAVING COUNT(*) > 1
  )
AND body IN(
  SELECT body
  FROM  comments
  GROUP BY author,body
  HAVING COUNT(*) > 1
  );

若要delete重复行,请将SELECT *更改为DELETE

SQL Fiddle演示

更新

要提高查询性能,可以尝试以下操作:

代码语言:javascript
复制
SELECT * FROM comments c
INNER JOIN 
(
  SELECT id,author,body
  FROM  comments
  GROUP BY author,body
  HAVING COUNT(*) > 1
 ) AS t
ON c.id NOT IN(t.id) AND c.author IN(t.author) AND c.body IN(t.body)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28266383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档