我懒,没有处理,直接copy的---------------------------1------------------------------------
select top 15 * from 
(
select CLTXJL.ID,DDXX.DDMC,DDXX.ID as DDID,CDMC,XSFX,TPID,WFBH,JGSJ,HPHM,HPYS,CSYS, 
HPZL,CLLX,CLSD,CWKC,CSL,HDSJ,DYBJ,DYBH,DCBJ,SCBZ,BJBJ
FROM CLTXJL,CENTER_SYS_CDXX,(select * from center_sys_ddxx where id in (253))  DDXX
where CLTXJL.CDID=CENTER_SYS_CDXX.ID and CENTER_SYS_CDXX.DDID=DDXX.ID
) cltxjl where 
 JGSJ>='2010-08-10 09:27:00'  and JGSJ<'2010-08-19 09:27:00' and cltxjl.id 
not in
(
select top 10000 ss.id from
(
select cltxjl.ID FROM CLTXJL,CENTER_SYS_CDXX,(select * from center_sys_ddxx where id in (253))  DDXX
where 
 CLTXJL.CDID=CENTER_SYS_CDXX.ID and CENTER_SYS_CDXX.DDID=DDXX.ID 
and JGSJ>='2010-08-10 09:27:00'  and JGSJ<'2010-08-19 09:27:00' 
)ss
)-----------------------------------2-------------------------------------------create  table #tb
(
ID int,
DDMC varchar(100),
DDDM varchar(50),
DDJD varchar(50),
DDWD varchar(50)
)
insert   into   #tb   select * from center_sys_ddxx where id in(253)select top 15 * from 
(
select CLTXJL.ID,#tb.DDMC,#tb.ID as DDID,CDMC,XSFX,TPID,WFBH,JGSJ,HPHM,HPYS,CSYS, 
HPZL,CLLX,CLSD,CWKC,CSL,HDSJ,DYBJ,DYBH,DCBJ,SCBZ,BJBJ
FROM CLTXJL,CENTER_SYS_CDXX,#tb
where CLTXJL.CDID=CENTER_SYS_CDXX.ID and CENTER_SYS_CDXX.DDID=#tb.ID
) cltxjl where 
 JGSJ>='2010-08-10 09:27:00'  and JGSJ<'2010-08-19 09:27:00' 
and cltxjl.id 
not in
(
select top 10000 ss.id from
(
select cltxjl.ID FROM CLTXJL,CENTER_SYS_CDXX,#tb
where
 CLTXJL.CDID=CENTER_SYS_CDXX.ID and CENTER_SYS_CDXX.DDID=#tb.ID 
and JGSJ>='2010-08-10 09:27:00'  and JGSJ<'2010-08-19 09:27:00' 
)ss
)
drop table #tb
为什么这两个查询出来的结果却是不一样的??

解决方案 »

  1.   

    写法问题
    select top ....一般应该有order by,没有就可能出现结果不一致情况,无论在子查询内还是主查询,子查询尤其应该有order by
      

  2.   

    估计是因为 插入#tb后,top出的顺序变了
      

  3.   

    如果我order by了,会不会很耗时,数据量很大。因为查询时涉及到时间条件很多,我把聚集索引建到时间上去了。查询出来的数据的顺序是一样的,top出来的15条数据,两条都是按时间排序了的。
      

  4.   

    你要的是TOP, 取出哪些数据,没关系吧。
    用临时表是快很多,用吧
      

  5.   

    很奇怪的现象,非要得order by 数据,但是我排序的依据是时间,但是我时间又有很多相同的,还是难得解决 。