[英]SQL queries - difference between exists and in
以下两个查询是否总是给出相同的结果? 如果没有,为什么不呢?
1)
select PayFrequencyTypeID, PayFrequencyDesc
from db_uspaybo.tblpayfrequency
where (PayFrequencyTypeID,1) not in (
select payfrequencytype,1
from tblcustomerpayapproval
where fedtaxid='903008887' and payrollyear=year(curdate())
);
2)
select payfrequencytypeid
from tblpayfrequency
where not exists (
select distinct payfrequencytype
from tblcustomerpayapproval
);
提前致谢。
我认为这就是您想要的``不存在''A.Id和B.Id,这是连接这些表的Pk和FK。(我不知道确切的字段名称)
从不存在的tblpayfrequency A中选择payfrequencytypeid(选择*
来自tblcustomerpayapproval B,其中A.Id = B.Id和B.fedtaxid ='903008887'和B.payrollyear = year(curdate()));
基本上not in
not exists
和not exists
非常相似,通常会产生相同的结果。
区别在于,如果集合中的值之一为NULL(至少在Oracle上为in
),则in
将返回false,而exists
仅检查记录的存在而忽略其值。
在此特定情况下,您将获得WHERE子句,该子句将导致第一个查询返回不同的结果。
在MySQL上通常更快的第三种方法是在主查询中保留对表的联接,并检查联接字段是否为NULL:
select payfrequencytypeid
from
tblpayfrequency f
left join tblcustomerpayapproval a
on a.payfrequencytype = f.payfrequencytype
where
a.payfrequencytype IS NULL
其他一般提示:
1
。 简化和标记:
SELECT p, d
FROM f
WHERE (p, 1) NOT IN
(SELECT t, 1
FROM a
WHERE i='903008887'
AND y = year (curdate()));
SELECT p
FROM f
WHERE NOT EXISTS
(SELECT DISTINCT t
FROM a);
结果将不同。 原因:第一个查询要求2列。 但是我们不知道这一年的问题或903008887的过滤是否有效果。如果该过滤有效果-第二个查询怎么做?
第一个从db_uspaybo.tblpayfrequency返回一些数据,其中在这些条件下,其PayFrequencyTypeID不在payfrequencytype表中。
第二个不从db_uspaybo.tblpayfrequency返回任何数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.