【发布时间】:2018-12-22 04:21:38
【问题描述】:
我正在运行两个查询进行比较:
SELECT
PD.PRACTITIONERID, PD.LastName, PD.FirstName, PD.NationalProviderID
FROM
vwPractitionerDemographics PD
WHERE
EXISTS (SELECT 1 FROM vwPractitionerLocations
WHERE PracticeTaxIDNumber = '59-1205165')
SELECT
PD.PRACTITIONERID, PD.LastName, PD.FirstName, PD.NationalProviderID
FROM
vwPractitionerDemographics PD
WHERE
PRACTITIONERID IN (SELECT practitionerID FROM vwPractitionerLocations
WHERE PracticeTaxIDNumber = '59-1205165')
带有EXISTS 子句的查询返回11,000 条记录,包括那些没有过滤的PracticeTaxIDNumber。带有IN 子句的查询返回169 条记录,并产生正确的结果。
有人可以解释为什么EXISTS 在这里不起作用吗?
我知道EXISTS 在条件为真时返回记录,但由于条件是用PracticeTaxIDNumber 过滤的,我认为它只会返回过滤后的记录。
【问题讨论】:
-
vbPractionerDemographics表中的每条记录单独运行EXISTS查询。PracticeTaxIDNumber总是设法存在(它怎么可能不存在)在您的vwPRactionerLocations表中,因此返回每条记录。 -
至于您的 IN,您的
Demo表中只有 169 条记录,其中PractionerId的PracticeTaxIDNumber为59-1205165。 -
EXIST为每条记录运行,如果内部查询返回任何内容,则计算结果为true。SELECT 1 FROM vwPractitionerLocations WHERE PracticeTaxIDNumber = '59-1205165'将为vwPractitionerDemographics的每条记录 返回true,因为该查询将总是 返回至少一个结果。 -
你是说 Exists 只是评估条件是否为真?即,如果确实存在 PracticeTaxIDNumber = xxx 的记录,则运行主查询 - Exists 查询实际上独立于主查询。如果 Exists 为 True,则运行主查询。
标签: sql-server exists