Exist是用于判断某个值是否在表中存在的最节省资源的方法。
如果用select判断某个值是否存在,它会返回符合条件的所有记录,试想一下,如果该值在表中出现的次数很多,比如100000条记录,那么将会占用大量的网络资源。
但exist在遇到第一条符合的记录就返回值了。
如果用select判断某个值是否存在,它会返回符合条件的所有记录,试想一下,如果该值在表中出现的次数很多,比如100000条记录,那么将会占用大量的网络资源。
但exist在遇到第一条符合的记录就返回值了。
如果满足Bz = 'R' and a.OpFlag = '001'似乎肯定就不能满足select * from CntTurnLog b
where b.OpFlag = 't01',要后面一个判断干什么?
同意liuchen对Exist的看法,以前我喜欢用select count(*) 来判断是否有重复记录,后来也改用了Exist方法。
当 “ OpFlag='001' 并且 Bz=‘R’ 且 在b表中所有的Bz='R'时,OpFlag<>'t01'的a表存在记录时,表达式为真
nono兄,你的理解不太好懂,我看这样解释是不是好一些:
当a 表中所有的Bz="R"的记录中,符合以下条件的时,表达式为真:
1,存在OpFlag='001';
2,不存在OpFlag="t01"。
首先选择出满足b.OpFlag = 't01'和 b.BZ = a.Bz 的数据集A,然后再从CntTurnLog中选择满足a.Bz = 'R' and a.OpFlag = '001'和不存在于数据集A的数据集B, 最后存在数据集B则会返回True,否则false.三少 :o)
它应该是:选出这样的记录:在CntTurnLog表中Bz = 'R' 、OpFlag = '001'、opflag<>'t01'的记录
这个语句的功能在于比较快!其实和
select *
from CntTurnLog a
where a.Bz = 'R'
and a.OpFlag = '001' and a.opflag<>'t01'是一样的
不信可以实验以下!
wwl007, 你说的不对吧? a.OpFlag = '001' and a.opflag<>'t01' 这样的条件的后一半是没意义的. 呵呵