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 个值没有多大意义。
我运行比较两个查询:
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 个值没有多大意义。