关于删除重复数据,提供一种新的思路,以前大致只用过group 加 having保留最小行号的数据,
这种理解不够的情况下一时难以想起来sql要如何写,要搜索一下才能写,今天提供一种容易理解,
然后还容易记住的方法,思路:
1.新建一个临时表temp(跟目标表结构一样);
2.给temp加上唯一索引(支持单个或多个字段),忽略重复键(插入数据的时候就跟往Set里面
写数据一样了,重复的数据直接忽略),语法 如:
create unique index {unique_words_b} on {words_b}({wordid},{unitid}) with ignore_dup_key
大括号内的值,分别是:索引名,临时表名,重复字段1,重复字段2;
3.将数据插入temp表:insert into {words_b} select * from {words}
大括号内的值,分别是:临时表名,目标表名;
4.检查一下,temp表里面是不是只有不重复的数据;
5.删除目标表现有数据,将temp表数据导入目标表,删除临时表
delete {words}
insert into {words} select * from {words_b}
drop table {words_b}
变量就不再解释了,上面有
总结:跟以往那种方法不同的是,这一种是建立唯一索引,忽略重复键,将操作类比成Set就可以,你尽管写,
重复了不加进去就是了,要记的东西就是如何创建忽略重复键的索引 ,语法再记一下:
create unique index {unique_words_b} on {words_b}({wordid},{unitid}) with ignore_dup_key