我有一个包含以下字段的表:

id (Unique)
url (Unique)
title
company
site_id

现在,我需要删除具有相同title, company and site_id的行.一种方法是使用以下SQL和脚本(101):

SELECT title, site_id, location, id, count( * ) 
FROM jobs
GROUP BY site_id, company, title, location
HAVING count( * ) >1

运行此查询后,我可以使用服务器端脚本删除重复项.

但是,我想知道这是否只能使用SQL查询来实现.

推荐答案

一个非常简单的方法是在3列上添加UNIQUE个索引.在编写ALTER语句时,请包含IGNORE关键字.就像这样:

ALTER IGNORE TABLE jobs
ADD UNIQUE INDEX idx_name (site_id, title, company);

这将删除所有重复的行.作为一个额外的好处,future INSERTs个重复的将出错.和往常一样,在运行类似的操作之前,您可能需要进行备份...

Mysql相关问答推荐

完全相同的A B表达在SQL中的不同上下文中意外返回不同的结果

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

默认情况下,MariaDB是否限制为本地主机?

当日期附加到MySQL后,如何按日期说明排序?

JPA对具有动态键和动态值的JSON列的原生查询

将上传文件的存储路径放在一张表中的缺点是什么?

MySQL MDL(元数据锁)为什么会导致死锁?

使用 autocommit = 0 和 InnoDB 表的 LOCK TABLES 检测死锁

使用 Having 表达式连接多个表

当用它的别名替换 (MAX(s.salary) - MIN(s.salary) 它将不起作用.. 为什么?

MySQL中的会话客户端是什么

如何在 Mysql 中创建复合外键

如何在 SQL 中的一行中查找最小值和最大值?

避免重复进入mysql数据库的最佳方法

If else on WHERE 子句

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

Laravel classloader.php 错误打开流失败:没有这样的文件或目录

phpmyadmin没有收到要导入的数据错误,如何解决?

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别

MySQL导入数据库但忽略特定表