SQL 存在的记录比 IN 多 Returns

SQL Exists Returns more records than IN

我运行比较两个查询:

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 子句的查询 return 11,000 条记录,包括那些没有过滤的 PracticeTaxIDNumber。使用 IN 子句查询 returns 169 条记录,并产生正确的结果。

有人可以解释为什么 EXISTS 在这里不起作用吗?

我明白 EXISTS returns 记录条件是否为真,但由于条件是用 PracticeTaxIDNumber 过滤的,我认为它只会 return筛选记录。

您应该在 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 服务器无法猜测您希望表在查询中如何相互关联,您必须明确提供该信息。使用 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 个值没有多大意义。