注册 登录
编程论坛 SQL Server论坛

三种不同的查询为什么有不同的结果集?请教各位了.

sylknb 发布于 2011-03-08 16:17, 345 次点击
我要找出二表不相同的报考号(kscjk比kscjk1表多一条记录(其中kscjk只有报考号而没有xm=' ')
在VFP6下:DBF数据库
kscjk表                 |     kscjk1表

报考号     xm           |      报考号              xm
...        ...             |      ....                 ...
s51002   xx                |     s51002                 xx

s51003                      | 此表此条是空记录

我采用三种方法:

第一种查询速度如此慢,象死机一样.
1\select kscjk.报考号,kscjk.xm from kscjk,kscjk1 where kscjk.报考号<>kscjk1.报考号 &&&类似死机
 
第二种结果不对,明只有一条,结果集cut字段1557131061
2\select count(*) from kscjk,kscjk1 where kscjk.报考号<>kscjk1.报考号

运行结果是错的,明只一条记录,但结果集cut字段报有1557131061

第三种
3\select kscjk.报考号,kscjk.xm from kscjk,kscjk1 where kscjk.报考号<>kscjk1.报考号 .and.kscjk.xm=' '
 
查出来的结果是s51003,是对的,但结果集有许多相同的s51003报考号(报考号s51003)
报考号           xm
 
s51003        均是空
s51003
s51003
..
..
..
  


请教:这三种情况是什么原因?请指教一下.


[ 本帖最后由 sylknb 于 2011-3-8 16:20 编辑 ]
1 回复
#2
png2011-03-10 00:56
首先, 你有两个数据量很大的表.

其次,你的查询基本上是在回答这样的一个问题 - 针对kscjk表的每一条记录,在kscjk1 表中找出报考号不同的所有记录.  也就是说如果表kscjk有m条记录, 表kscjk1有n条记录,你的结果集应该接近 m * (n-1)条记录.

试一下 -
Select kscjk.* From kscjk left join kscjkONE on kscjk.报考号= kscjkONE.报考号 Where kscjkONE.报考号 is null
1