本文翻译自:Remove duplicate rows in MySQL

I have a table with the following fields: 我有一个包含以下字段的表:

id (Unique)
url (Unique)
title
company
site_id

Now, I need to remove rows having same title, company and site_id . 现在,我需要删除title, company and site_id相同的行。 One way to do it will be using the following SQL along with a script ( PHP ): 一种方法是使用以下SQL以及脚本( PHP ):

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

After running this query, I can remove duplicates using a server side script. 运行此查询后,我可以使用服务器端脚本删除重复项。

But, I want to know if this can be done only using SQL query. 但是,我想知道是否只能使用SQL查询来完成。


#1楼

参考:https://stackoom.com/question/DtZn/在MySQL中删除重复的行


#2楼

If the IGNORE statement won't work like in my case, you can use the below statement: 如果IGNORE语句在我的情况下无法正常工作,则可以使用以下语句:

CREATE TABLE your_table_deduped like your_table;
INSERT your_table_deduped SELECT * FROM your_table GROUP BY index1_id, index2_id;
RENAME TABLE your_table TO your_table_with_dupes;
RENAME TABLE your_table_deduped TO your_table;
#OPTIONAL
ALTER TABLE `your_table` ADD UNIQUE `unique_index` (`index1_id`, `index2_id`);
#OPTIONAL
DROP TABLE your_table_with_dupes;

#3楼

I like to be a bit more specific as to which records I delete so here is my solution: 我想更具体地说明要删除的记录,因此这是我的解决方案:

delete
from jobs c1
where not c1.location = 'Paris'
and  c1.site_id > 64218
and exists
(
select * from jobs c2
where c2.site_id = c1.site_id
and   c2.company = c1.company
and   c2.location = c1.location
and   c2.title = c1.title
and   c2.site_id > 63412
and   c2.site_id < 64219
)

#4楼

You can easily delete the duplicate records from this code.. 您可以轻松地从此代码中删除重复的记录。

$qry = mysql_query("SELECT * from cities");
while($qry_row = mysql_fetch_array($qry))
{
$qry2 = mysql_query("SELECT * from cities2 where city = '".$qry_row['city']."'");if(mysql_num_rows($qry2) > 1){while($row = mysql_fetch_array($qry2)){$city_arry[] = $row;}$total = sizeof($city_arry) - 1;for($i=1; $i<=$total; $i++){mysql_query( "delete from cities2 where town_id = '".$city_arry[$i][0]."'");}}//exit;
}

#5楼

I had to do this with text fields and came across the limit of 100 bytes on the index. 我必须对文本字段执行此操作,并在索引上遇到了100个字节的限制。

I solved this by adding a column, doing a md5 hash of the fields, and the doing the alter. 我通过添加列,对字段进行md5哈希以及进行更改来解决了这一问题。

ALTER TABLE table ADD `merged` VARCHAR( 40 ) NOT NULL ;
UPDATE TABLE SET merged` = MD5(CONCAT(`col1`, `col2`, `col3`))
ALTER IGNORE TABLE table ADD UNIQUE INDEX idx_name (`merged`);

#6楼

If you don't want to alter the column properties, then you can use the query below. 如果您不想更改列属性,则可以使用以下查询。

Since you have a column which has unique IDs (eg, auto_increment columns), you can use it to remove the duplicates: 由于您有一列具有唯一ID(例如, auto_increment列),因此可以使用它删除重复项:

DELETE `a`
FROM`jobs` AS `a`,`jobs` AS `b`
WHERE-- IMPORTANT: Ensures one version remains-- Change "ID" to your unique column's name`a`.`ID` < `b`.`ID`-- Any duplicates you want to check forAND (`a`.`title` = `b`.`title` OR `a`.`title` IS NULL AND `b`.`title` IS NULL)AND (`a`.`company` = `b`.`company` OR `a`.`company` IS NULL AND `b`.`company` IS NULL)AND (`a`.`site_id` = `b`.`site_id` OR `a`.`site_id` IS NULL AND `b`.`site_id` IS NULL);

In MySQL, you can simplify it even more with the NULL-safe equal operator (aka "spaceship operator" ): 在MySQL中,您可以使用NULL安全的相等运算符 (也称为“太空飞船运算符” )来进一步简化它:

DELETE `a`
FROM`jobs` AS `a`,`jobs` AS `b`
WHERE-- IMPORTANT: Ensures one version remains-- Change "ID" to your unique column's name`a`.`ID` < `b`.`ID`-- Any duplicates you want to check forAND `a`.`title` <=> `b`.`title`AND `a`.`company` <=> `b`.`company`AND `a`.`site_id` <=> `b`.`site_id`;

在MySQL中删除重复的行相关推荐

  1. textarea选中行删除_Easy Data Transform如何在Excel中删除重复的行?

    Excel用户经常希望删除具有重复值的行.例如,要删除包含重复电子邮件的行,那么Easy Data Transform如何在Excel中删除重复的行?下面一起来看看吧. 先在您的Mac上安装Easy ...

  2. 在记事本++中删除重复的行

    本文翻译自:Removing duplicate rows in Notepad++ 是否可以在Notepad ++中删除重复的行,而只留下一行? #1楼 参考:https://stackoom.co ...

  3. mysql 如何删除重复的行_如何从mysql中的表中删除重复的行

    我需要从 mysql中删除表中的重复记录. 所以我有一个表名"employee"字段是empid,empname,empssn 为了获得重复记录我写了一个查询 SELECT COU ...

  4. Access中删除重复数据行

    1.什么是重复数据行: 1>.两笔记录的每一个字段都相同(表中没有主键): 2>.两笔记录的特定字段均相同,其余字段不同(表中可能有主键,也可能没有主键): 2.如何删除重复数据行: 1& ...

  5. 解决Mysql中删除重复记录的问题

    题记 本文主要介绍Mysql数据库表中,如何删除相同索引值.更新日期较早的记录行. 1.相同记录的由来 以Mysql为例,根据表的设计原则,表中不可能存在两条完全相同的记录. 第一范式(1NF):字段 ...

  6. MYSQL中删除重复记录

    这是个老生常谈的话题,我们在sql中删除一条重复的记录我们可以[以用户表user为例,包含id,name,value三个字段信息]: delete from 表 where id not in (se ...

  7. MySQL中删除重复数据

    2019独角兽企业重金招聘Python工程师标准>>> 参考网页 SQL删除重复数据只保留一条 https://blog.csdn.net/anya/article/details/ ...

  8. SQL中删除重复的行(重复数据),只保留一行 转

    方法一:使用在T-SQL的编程中 分配一个列号码,以COL1,COL2组合来分区排序,删除DATABASE重复的行(重复数据),只保留一行 // COL1,COL2是数据库DATABASE的栏位 de ...

  9. MySQL 中删除重复数据只保留一条

    WechatIMG256.jpeg 场景 在许多条记录里,存在着些相同的记录,使用SQL语句,删除掉重复项只保留一条. 数据模型 half_demon 半妖表 id name weapon skill ...

最新文章

  1. 普罗米修斯笔记:初识Prometheus
  2. 在Eclipse RCP中使用Spring AOP/ProxyFactory的问题
  3. Django运维后台的搭建之二:建立template和对应的ModelForm
  4. [翻译] 使用 Visual Studio 2019 来提高每个开发人员的工作效率
  5. 【LeetCode】053. Maximum Subarray
  6. fixed与sticky的区别
  7. oracle数据库11g完全卸载,oracle 11g完全卸载
  8. 优化一个奇葩表设计上的全表扫描SQL
  9. vue中v-for的使用以及注意事项
  10. 如何使用TunesKit AceMovi Video Editor Mac在视频中添加贴纸
  11. html 抓取 post 请求,自动向网页Post信息并提取返回的信息(一)
  12. 全国青少年信息学奥林匹克竞赛到底是什么?
  13. 哔哩哔哩(B 站)刚刚崩了
  14. 微博自定义来源怎么去掉android,手把手教大家如何修改微博来源
  15. 一切测试的基础——测试用例设计
  16. 对话京东安全首席架构师:电商平台构建安全防护体系关键点
  17. 快速制作PPT的方法有哪些?这五种很实用!
  18. 火山中文编程 -- 封装信息框API
  19. Ansys中meshing启动时经常弹出“script error”
  20. 【电气专业知识问答】问:高压断路器大修后运行人员需了解哪些试验工作及结论?

热门文章

  1. sqlyog通过跳板机ssh连接mysql数据库
  2. Linux下把U盘格式化为fat32
  3. Hyper-v网络配置
  4. ajax请求在ie下缓存的处理
  5. 8天玩转并行开发——第六天 异步编程模型
  6. 2014秋C++第19周 项目 单链表/枚举
  7. 视频专辑:Web Service视频教程
  8. 思想一碰就冒火: 开源贡献须耐心, 选择框架要谨慎
  9. C#图解教程(第4版)
  10. Cocos2dx 学习之CCTableView