版权声明:本文为博主原创文章,未经博主允许不得转载。转载请务必加上原作者:铭毅天下,原博客地址:http://blog.csdn.net/laoyang360
题记
本文主要介绍MySQL数据库表中,如何删除相同索引值、更新日期较早的记录行。
1、相同记录的由来
以Mysql为例,根据表的设计原则,表中不可能存在两条完全相同的记录。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
但是,在我们实际的业务系统中,很大可能会存在,除了主键外,剩余列完全相同或部分核心字段完全相同的数据在同一个库表中存在。
举例,如下截图所示:
该表中,主键为第1列ID和第2列Wid,两行数据的仅更新日期和标记列(2,3)不同,剩余列完全相同。
随着记录的增多,我们检索的需要,仅需要将Mid相同的记录保留住更新日期最新的一条记录。
2、如何仅保留最新日期的一条记录,删除其余日期较早的相同Wid的记录?
以下是删除操作sql的分解操作步骤。
步骤1:找出重复的记录。
- 1
- 1
步骤2:找出重复记录中,区分标志字段的最大值。
- 1
- 1
步骤3:查询出重复记录的ID信息。
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
步骤4:删除对应的ID记录。
整理出id信息,以逗号分隔,id是唯一值
1)删除空行操作
sed -i ‘/^$/d’ ./id_list.txt
2)换行符转化为逗号
cat id_list.txt | tr “\n” “,” > id_list_a.txt
3)删除操作
delete from msearch_dispose_articles_copy where id in ();
()里面放入4.2中 list_a存储的记录即可。
3、讨论
为了标注一条记录的状态,设计的时候我们会关联库表中的一条记录。但这条记录在库表中是唯一的,标注状态的改变体现在表中是相同记录行的某一特征列的改变。
因此,我们要做的是更新记录,而不是再次插入操作。
这样,也就避免了出现1中的“相同记录”。
20170309 22:18 于家中床前
作者:铭毅天下
转载请标明出处,原文地址:
http://blog.csdn.net/laoyang360/article/details/60976978
如果感觉本文对您有帮助,请点击‘顶’支持一下,您的支持是我坚持写作最大的动力,谢谢!