我正在运行两个查询以进行比较:
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
进行过滤的,所以我认为它只会返回过滤后的记录。
答案 0 :(得分:2)
您应该在WHERE子句中使用JOIN或结合使用EXISTS。
SELECT PD.PRACTITIONERID, PD.LastName, PD.FirstName, PD.NationalProviderID
FROM vwPractitionerDemographics PD
WHERE EXISTS
(SELECT 1
FROM vwPractitionerLocations
WHERE PracticeTaxIDNumber = '59-1205165'
AND vwPractitionerLocations.[matching column here] = PD.[matching column here])
SELECT PD.PRACTITIONERID, PD.LastName, PD.FirstName, PD.NationalProviderID
FROM vwPractitionerDemographics PD INNER JOIN vwPractitionerLocations ON vwPractitionerLocations.[matching column here] = PD.[matching column here])
WHERE PracticeTaxIDNumber = '59-1205165'
SQL Server无法猜测您希望表如何在查询中相互关联,因此必须显式提供该信息。使用IN
,在这种情况下使用, was not correct as it should be used when evaluating multiple values. In your case you are passing a single value to be evaluated. If you really want to use IN then you would write
... Where PracticeTaxIDNumber IN('59 -1205165')`,但我认为您可以看到这对于1个值没有多大意义。>