|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
恢复到之前的某个状态,是需要数据的。这数据可以是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无非三种操作,增删改,先说三种操作的日志格式。 |
|