仓酷云

标题: 在Sql Server中查出反复数据并删除反复数据办法 [打印本页]

作者: 因胸联盟    时间: 2015-1-16 14:07
标题: 在Sql Server中查出反复数据并删除反复数据办法
恢复到之前的某个状态,是需要数据的。这数据可以是a)回滚步骤或者b)操作之前的数据状态原文。在实践的开辟过程当中,我们常常会碰着数据库中某字段有反复数据的情形,好比有一个员工表,员工ID独一的,但员工姓名不是独一的,那末假如数据库中存在同名的员工时,我们要怎样查询出有反复姓名的数据呢?

先创立一个一时表,只要ID(员工编号)与name(员工称号)两个字段(测试用例,字段越少越分明^_^)
createtable#table
(
IDintprimarykeyidentity(1,1),
namevarchar(50)notnull
)

然后往该表中拔出员工姓名,包含两个反复姓名(张三和李明)
insertinto#table(name)
select张三
unionall
select张三
unionall
select李明
unionall
select李明
unionall
select李四

接上去我们要怎样查询出有反复姓名的张三和李明呢?使用groupby与having前提便可,sql以下:
selectnamefrom#tablegroupbynamehavingcount(1)>1

查询了局以下:
name
李明
张三

关于groupbyhaving与where子句的区分,请检察本站:
SqlServer中where与having的区分

呵呵,恰是我们想要的了局。反复的纪录是有查询出来了,那末我们要怎样删除个中反复的纪录,只留下一条数据呢?
删除反复数据只留下一条数据的sql以下:
deletet1from#tablet1,
(selectnamefrom#tablegroupbynamehavingcount(1)>1)t2
wheret1.name=t2.name
andt1.id(selectmax(id)from#tablet3wheret1.name=t3.name)

实行下面的sql,再来查询了局,了局以下:
IDname
2张三
4李明
5李四
这就申明,反复的纪录已被删撤除了。最初,删除测试表
droptable#table


在网上看到良多删除反复数据的办法,都有效到了一时表,实在不必,一个复杂的sql就能够完成了。但愿本例能给人人带来匡助。有了rowbase的binlog后,我们来分析一下怎么实现闪回。平时的DML无非三种操作,增删改,先说三种操作的日志格式。
作者: 变相怪杰    时间: 2015-1-18 12:05
可以动态传入参数,省却了动态SQL的拼写。
作者: 金色的骷髅    时间: 2015-1-25 12:31
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
作者: 愤怒的大鸟    时间: 2015-2-2 22:07
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
作者: 柔情似水    时间: 2015-2-8 12:40
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
作者: 乐观    时间: 2015-2-25 15:36
光写几个SQL实在叫无知。
作者: 兰色精灵    时间: 2015-3-8 00:45
连做梦都在想页面结构是怎么样的,绝非虚言
作者: 若相依    时间: 2015-3-15 19:41
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
作者: admin    时间: 2015-3-22 03:30
以前的DTS轻盈简单。但是现在的SSIS虽然功能强大了很多,但是总是让人感觉太麻烦。看看论坛中询问SSIS的贴子就知道。做的功能太强大了,往往会有很多用户不会用了




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2