Sql学习第三天——SQL 关于with ties介绍
关于with ties,对于with ties一般是和Top , order by相结合使用的,会查询出最后一条数据额外的返回值(解释:假如如果按照order by 参数排序TOP n(PERCENT)返回了前面n(pencen,实验:,实验用表(PeopleInfo):,复制具体相关代码 具体相关代码如下:,CREATE TABLE [dbo].[PeopleInfo]( [id] [int] IDENTITY(1,1) NOT NULL, [name] [nchar](10) COLLATE Chine,复制具体相关代码 具体相关代码如下:,insert into peopleinfo([name],numb,phone) values ('李欢','3223','1365255') insert into peopleinfo([nam,复制具体相关代码 具体相关代码如下:,select * from dbo.PeopleInfo,操作办法步骤1:不用with ties,具体相关代码:,复制具体相关代码 具体相关代码如下:,select top 3 * from peopleinfo order by [name] desc,操作办法步骤2:用with ties,具体相关代码:,复制具体相关代码 具体相关代码如下:,select top 3 with ties * from peopleinfo order by [name] desc,假如如果with ties不与top和order by结合使用的错误示范:,操作办法步骤1:不与order by结合使用,只和top结合使用:,具体相关代码:,复制具体相关代码 具体相关代码如下:,select top 3 with ties * from peopleinfo, 操作办法步骤2:不与top结合使用,只和order by结合使用:,具体相关代码:,复制具体相关代码 具体相关代码如下:,select with ties * from peopleinfo order by [name] desc,操作办法步骤3:不与top结合使用也不与order by结合使用:,具体相关代码:,复制具体相关代码 具体相关代码如下:,select with ties * from peopleinfo,
昨天发现程序中数据分析的结果不对,重新进行分析后,原数据仍在,有值的字段被累计。心说,不对啊,是重新生成记录后才分析的啊。难道忘了DELETE了?查具体相关代码,发现有删除数据库语句。于是在查询分析器中执行,报错。反复试几次,明白了,Delete From不认表名别名!回头想下,当初程序改完后主要是在Oracle中测的,SQLServer一直没细测。
之所以要用别名,是因为where条件中需要用到子查询写一些条件,下面不写那么复杂,仅说明一下问题。
结论:
(ORACLE适用) DELETE FROM TABLEA A WhERE A.FIELD1=10
(SQLSERVER适用) DELETE TABLEA FROM TABLEA A WhERE A.FIELD1=10
(Ora\SQL均适用) DELETE FROM TABLEA WhERE TABLEA.FIELD1=10
两点经验:
1、测试要全面;
2、要自信,写程序时考虑的情况挺全的。
update情况
update T_report a
set a.status='1'
where a.report_Seq=1234
执行失败
update a
set a.status='1'
from T_report a
where a.report_Seq=1234
执行成功
所以要做通用的程序,做好不使用别名