代码之家  ›  专栏  ›  技术社区  ›  jackstraw22

SQL存在的记录多于

  •  2
  • jackstraw22  · 技术社区  · 7 年前

    我正在运行两个查询进行比较:

    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 子句返回11000条记录,包括那些没有经过筛选的记录 PracticeTaxIDNumber 是的。使用的查询 IN 子句返回169条记录,并生成正确的结果。

    有人能解释为什么 存在 不在这里工作吗?

    我明白 存在 如果条件为true,则返回记录,但由于条件是用 实际氧化值 我以为它只会返回过滤后的记录。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Igor    7 年前

    您应该在where子句中使用join或use exists与join一起使用。

    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 …其中practicetaxidnumber in('59-1205165')`但我认为您可以看到,对于1个值,这没有多大意义。