日期:2014-05-18  浏览次数:20582 次

这个SQL语句错在哪?该如何写
select   c.id,cname,area,levels,c.site,c.uid,work_no,visitrec,qm,nexttimegj,d.addtime  
from   zs_khinfo   c,zs_gzrec   d  
where  
c.id   in   (select   fid   from   zs_khinfo   a,zs_gzrec   b   where   b.fid=a.id   and   datediff(day,nexttimegj,getdate())=0  
and   levels <> 'O ')   and   c.id=d.fid     order   by   d.addtime   desc

问题如下:
select   fid   from   zs_khinfo   a,zs_gzrec   b   where   b.fid=a.id   and   datediff(day,nexttimegj,getdate())=0  
and   levels <> 'O '得到的值有188条
而整个语句执行出来有1000多条,我只需要id   in   188条里的ID,怎么会得到1000多条

我要实现的整个功能,就是提取表a和b的数据,以表a的id和表b的fid关联,表b是子表,fid会有重复,我要提取今天需要跟踪的记录(只要最新的一条),day,nexttimegj,getdate())=0来实现,但是我需要显示表a所对应的表b的fid的最新的记录,如果我用 "select   所有提取的所有字段   from   zs_khinfo   a,zs_gzrec   b   where   b.fid=a.id   and   datediff(day,nexttimegj,getdate())=0   and   levels <> 'O '   order   by   b.addtime   desc "这条语句来实现,只能满足是今天需要跟踪的记录,但显示的记录不会是最新的,比如如果今天我填的信息,跟踪时间填的分明有今天,后天,大后天,它只会显示今天,而不是大后天,如果我用datediff(day,nexttimegj,getdate()) <0可以得到最新的信息,但是没有满足必须是今天需要跟踪的记录,这条SQL语句我该怎么写!!

------解决方案--------------------
你的語句可以這麼改,不需要使用子查詢

select c.id,cname,area,levels,c.site,c.uid,work_no,visitrec,qm,nexttimegj,d.addtime
from zs_khinfo c,zs_gzrec d
where datediff(day,nexttimegj,getdate())=0 and levels <> 'O ' and c.id=d.fid order by d.addtime desc

但是你下面的文字有點沒看明白。
------解决方案--------------------
把你的数据和查询后的结果贴上来,才能清楚。