请问:这两条语句的区别,在线等待回答,谢谢你们
use hzxt
select distinct Col001
from [060522-060529]
where Col001 not in
(
select Col001
from 联通黑名单
)
and
substring (Col001,1,7)
in
(
select Col001
from 手机话段联通话段
where Col003 not in('天津','海南','河南','广东','北京','黑龙江','广西','上海')
)
和
use hzxt
select distinct Col001
from [060522-060529]
where substring (Col001,1,7)
in
(
select Col001
from 手机话段联通话段
where Col003 not in('天津','海南','河南','广东','北京','黑龙江','广西','上海')
and
Col001 not in
(
select Col001
from 联通黑名单
)
)
第一个查询结果是464271
个
第二个查询结果是459059个!!!
请问,这两条语句的执行机理有什么不同呀?
问题点数:20、回复次数:9Top
1 楼Haiwer(海阔天空)回复于 2006-06-02 11:46:40 得分 10
没可能
Top
2 楼Haiwer(海阔天空)回复于 2006-06-02 11:47:34 得分 0
看错了
Top
3 楼zzit0721()回复于 2006-06-02 11:48:18 得分 0
第一个是先算出不在黑名单的记录,然后在这些记录在选符合第2个条件的记录
第二个就正好相反Top
4 楼guoli0813(峥狼)回复于 2006-06-02 11:52:00 得分 0
这些我都知道,但是查询出来的结果确确实实不一样Top
5 楼zzit0721()回复于 2006-06-02 11:54:54 得分 0
肯定不一样啊,拜托,我解释的还不清楚?
比如说你第一个黑名字的记录是4600,在这些记录中满足第2个条件的是4000个
那结果就是4000个
那第二条语句就是,先满足的substring (Col001,1,7)
in
(
select Col001
from 手机话段联通话段
where Col003 not in('天津','海南','河南','广东','北京','黑龙江','广西','上海')
这个有5000个,而在这些记录集合中又有4600个满足第二个条件
所以结果就4600个
2个结果完全不同的,懂了不Top
6 楼zzit0721()回复于 2006-06-02 11:58:50 得分 10
再解释清楚点,就是很可能,你2个条件是很相象的,造成了, 第一个条件包含了第二个条件查询的内容,或,第二个条件包含了第一个条件查询的内容Top
7 楼guoli0813(峥狼)回复于 2006-06-02 11:59:27 得分 0
让我好好想一想,我们这儿有一批号码,需要过滤黑名单,并且屏蔽不用发的省份,我写的语句两个结果不一样,那按照哪一个比较合适呢?Top
8 楼guoli0813(峥狼)回复于 2006-06-02 12:06:04 得分 0
zzit07210
你说的没有错,第二个条件包含了第一个条件里面的内容Top
9 楼super_paladin(成熟给我们的不是越来越懂得珍惜 而是越来越懂得放弃)回复于 2006-06-02 12:24:36 得分 0
如果楼主是电信局的,汗一个Top




