首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Sybase >

select结果集顺序有关问题

2012-02-22 
select结果集顺序问题--1.执行脚本drop table tps_tgocreate table tps_t(dcmttp u_dcmttp not null,dcmtn

select结果集顺序问题
--1.执行脚本
drop table tps_t
go
create table tps_t(
dcmttp u_dcmttp not null,
dcmtno u_dcmtno not null
)
go
drop table #tps
go
create table #tps(
dcmttp u_dcmttp not null,
dcmtno u_dcmtno not null
)
go
insert tps_t values('731', '000000001')
insert tps_t values('731', '000000002')
insert tps_t values('731', '000000003')
insert #tps values('731', '000000001')
go --标记A

select * from tps_t

declare @var varchar(100)
update tps_t set
@var=@var+b.dcmtno
from #tps a, tps_t b
wherea.dcmttp=b.dcmttp
anda.dcmtno=b.dcmtno

select * from tps_t

--2.返回结果:
dcmttp dcmtno  
------ ------  
731 000000001  
731 000000002  
731 000000003  

dcmttp dcmtno  
------ ------  
731 000000002  
731 000000003  
731 000000001  

--3.问题:为什么两个select的结果顺序不一样?这个顺序由什么来决定?脚本中update语句为什么会对这个顺序产生影响?脚本中标记A的"go"如果拿掉后两个select结果顺序会一样,为什么?




[解决办法]
其实数据库理论中的一个重要概念就是表中的记录是没有顺序的。

估计,是当你的UPDATE中的JON a.dcmttp=b.dcmttp and a.dcmtno=b.dcmtno导致了顺序的改变。
[解决办法]
2楼结果是否顺序有变?
按道理讲,顺序应该不变,你的表中没有主键、索引,只是变量累加,隐式内连接
[解决办法]
在ASA中测试一下,没有这种情况
[解决办法]
顺序有自然、逻辑两种,
如果没有索引,SELECT是按照自然顺序(先进入的在前面),
如果有,则SELECT是按照逻辑顺序显示记录,
虽然两者的物理位置是一样的,即先进入的在前面
[解决办法]
测试没有得到这样的效果

热点排行