仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 682|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页编程之删除Table表中的反复行的办法

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
珍贵的资金可以用于其他业务的启动,诸如市场、广告或调研和开发等。使用SQLServer2005的新功效NOW_NUMBER和CTE能够很好的完成.
举例申明以下:
创建测试数据:
复制代码代码以下:
createtableDup1
(
Col1intnull,
Col2varchar(20)null
)
insertintoDup1values
(1,"aaa"),
(2,"aaa"),
(2,"aaa"),
(2,"aaa"),
(3,"bbb"),
(3,"bbb"),
(4,"ccc"),
(4,"ddd"),
(5,"eee")
select*fromDup1

能够检察到反复的数占有:
复制代码代码以下:
SELECTCol1,Col2,COUNT(*)ASDupCountFROMDup1GROUPBYCol1,Col2HAVINGCOUNT(*)>1


接上去先容怎样delete失落反复的数据:
1.NOW_NUMBER:SQLServer2005增加了很好用的RANKING函数(NOW_NUMBER,RANK,DENSE_RANK,NTILE),使用NOW_NUMBER()OVER(PARTITIONGY)最为间接,也最为便利,不克不及修正表大概发生过剩的列.
起首会分派一个列号码,以Col1,Col2组合来分区排序.
复制代码代码以下:
SELECTCol1,Col2,ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrnFROMDup1


失掉的序号以下:

很分明的是反复列都分组支解排序,只必要delete失落排序序号>1的便可.
复制代码代码以下:
--用到CTE
WITHDupsD
AS(
SELECTCol1,Col2,
ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrn
FROMDup1
)
DELETEDupsD
WHERErn>1;
--大概
DELETEAFROM(
SELECTCol1,Col2,
ROW_NUMBER()OVER(PARTITIONBYCol1,Col2ORDERBYCol1)ASrn
FROMDup1)AWHEREA.rn>1

2.创立一个标识键独一的表记一列.
复制代码代码以下:
ALTERTABLEdbo.Dup1
ADD
PKINTIDENTITY
NOTNULL
CONSTRAINTPK_Dup1PRIMARYKEY;
SELECT*
FROMDup1;

删除找出与Col1,Col2不异而且比Dup1.PK年夜的纪录,也就是保存反复值中PK最小的纪录.
复制代码代码以下:
DELETEDup1
WHEREEXISTS(SELECT*
FROMDup1ASD1
WHERED1.Col1=Dup1.Col1
ANDD1.Col2=Dup1.Col2
ANDD1.PK>Dup1.PK);

3.selectdistantinto,这类办法借助一个新的table,把不反复的了局集转移到新table中.
复制代码代码以下:
SELECTdistinctCol1,Col2INTONoDupsFROMDup1;select*fromNoDups

倡议接纳第一种和第三种办法,第一种多见于T-SQL的编程中,第三种在ETL中经常利用.DBaaS并不意味着解决方案提供者要让自己失业。与其他系统一样,在实施DBaaS解决方案时,客户可能需要部署、迁移、支持、异地备份、系统集成和灾难恢复等方面的帮助。
沙发
发表于 2015-1-19 06:17:45 | 只看该作者
可能有的朋友会抱怨集成的orderby,其实如果使用ranking函数,Orderby是少不了的。如果担心Orderby会影响效率,可以为orderby的字段建立聚集索引,查询计划会忽略orderby操作(因为本来就是排序的嘛)。
简单生活 该用户已被删除
板凳
发表于 2015-1-24 18:35:33 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
爱飞 该用户已被删除
地板
发表于 2015-2-2 11:50:13 来自手机 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-7 19:56:58 | 只看该作者
入门没那么困难,精通没那么容易
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-23 09:44:54 | 只看该作者
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
蒙在股里 该用户已被删除
7#
发表于 2015-3-7 07:34:52 | 只看该作者
原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
海妖 该用户已被删除
8#
发表于 2015-3-14 15:27:29 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
小妖女 该用户已被删除
9#
发表于 2015-3-21 11:57:43 | 只看该作者
同样会为索引视图等应用带来麻烦。看看行级和事务级的快照数据放在tempdb中,就能感觉到目前架构的尴尬。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表