类型:文件处理大小:2.4M语言:中文评分:10.0标签:立即下载在正常开发中,我们经常会遇到数据表中数据重复的情况,那么如何解决呢?本文介绍了两种情况下的重复数据删除方法:1 .完全重复的重复数据删除;第二,一些字段数据被复制。
第一,完全重复的重复数据消除方法
以下SQL语句可用于表中完全重复的重复数据消除。
密码
将表“# temp”创建为(从表名中选择distinct *);-创建一个临时表,并将DISTINCT重复数据消除后的数据插入临时表
截断表名;-清除原始表格数据
插入表名(选择*从' # temp ');-将临时表数据插入原始表中
DROPTABLE ' # temp-删除临时表
具体思路是先创建一个临时表,然后将DISTINCT后的表数据插入到这个临时表中;然后清空原表数据;我们来谈谈将临时表中的数据插入到原始表中;最后,删除临时表。
二、部分重复数据删除方法
首先查找重复数据
从表名组中选择字段1、字段2、计数(*)按字段1、字段2选择计数(*) 1
把上面的数字改成=,就可以不重复的找出数据了。
如果要删除这些重复数据,可以使用以下语句将其删除:
从表名中删除字段1,字段2
(从表名组中选择字段1、字段2、计数(*)按字段1、字段2选择计数(*) 1)
上面的语句很简单,就是删除查询到的数据。然而,这种删除的效率非常低,并且数据库可能会因大量数据而被卡住。
基于以上情况,可以先将查询到的重复数据插入到临时表中,然后删除,这样删除时就不需要再次查询了。如下所示:
创建表临时表AS
(从表名组中选择字段1、字段2、计数(*)按字段1、字段2选择计数(*) 1)
可以删除以下内容:
从表名中删除字段1、字段2(从临时表中选择字段1、字段2);
在删除临时表之前创建临时表比用一条语句直接删除要高效得多。
上述语句将删除所有重复项。在oracle中,有一个隐藏的自动rowid,它给每个记录一个唯一的rowid。如果我们想保留最新的记录,我们可以使用这个字段来保留重复数据中具有最大rowid的记录。
以下是查询重复数据的示例:
从表名a中选择a.rowid,a. *。
在哪。rowid!=
(
从表名b中选择max(b.rowid)
为什么?字段1=B。字段1和
A.字段2=B。字段2
)
上面括号中的语句是为了找出重复数据中rowid最大的记录。在外部,除了最大的rowid之外,找到了重复的数据。
因此,我们希望删除重复的数据,只保留最新的数据,因此我们可以这样写:
从表名a中删除
在哪。rowid!=
(
从表名b中选择max(b.rowid)
为什么?字段1=B。字段1和
A.字段2=B。字段2
)
同理,以上代码的执行效率终究是比较低的,所以我们可以考虑建立一个临时表,将需要判断为重复的字段和rowid插入到临时表中,然后在删除的时候进行比较。
创建表临时表为
从正式表格aGROUPBYa中选择a .字段1、a .字段2、MAX(a.ROWID)数据。领域1,领域2;
从表名a中删除
在哪。rowid!=
(
从临时表b中选择table
为什么?字段1=B。字段1和
A.字段2=B。字段2
);
提交;