进行自联接以隐藏重复项 - 获取错误消息

时间:2012-08-24 14:39:52

标签: sql-server tsql sql-server-2005

好的,我正在进行自我查询以抑制视图的重复项。我正在使用的代码是:

    USE BILLING

    SELECT Provider_Code,
           Provider_LName,
           Provider_Fname,
           Provider_Title,
           AGENCY_LOCATION_NAME_LINE_1,
           CostCenter_AbbrName
    FROM   dbo.ServiceProfiler prov1
           INNER JOIN
           dbo.ServiceProfiler prov2
           ON prov1.Provider_Code = prov2.Provider_Code
    WHERE  0 = (SELECT COUNT(s1.Provider_Code)
                FROM   prov1
                WHERE  prov2.Provider_Code = prov1.Provider_Code
                       AND prov2.Provider_Code < prov1.Provider_Code);

在SQL Server 2005上执行查询时,我收到消息:

  

Msg 208,Level 16,State 1,Line 3
  无效的对象名称'prov1'。

我不能为我的生活理解为什么别名无效。我想我发现了一个类似的问题here。但它非常通用,并没有使用别名显示完整的“真实”查询。

4 个答案:

答案 0 :(得分:1)

我会做更多这样的事情:

SELECT Provider_Code,
           Provider_LName,
           Provider_Fname,
           Provider_Title,
           AGENCY_LOCATION_NAME_LINE_1,
           CostCenter_AbbrName
FROM   dbo.ServiceProfiler prov,
     (SELECT Provider_Code,count(*) Count from dbo.ServiceProfiler group by Provider_Code HAVING count(*)=0) q
WHERE prov.Provider_Code = q.Provider_Code

我想你也可以做一个直接的子选择。我认为加入子查询更容易理解,但那就是我。

答案 1 :(得分:0)

您无法使用FROM prov1 - 没有名为prov1的表格。根据{{​​3}},FROM与* table_source *一起使用,* table_source *是表或视图名称。

可以从子查询的where子句引用prov1

另请注意,子查询中的where子句没有意义。 prov2.ProviderCode不能同时 AND 等于prov1.ProviderCode

答案 2 :(得分:0)

FROM   prov1

这是你的问题;由于是另一个select,您需要在table指定select from。 您可以使用alias的{​​{1}}到prov1的{​​{1}} select,但需要指定join,并且,一个新的别名。

答案 3 :(得分:0)

您无法在prov1语句的select内调用where表,您必须调用ServiceProfiler AS Prov3并将Where语句更改为@RB Said < / p>

  

另请注意,子查询中的where子句没有意义。   prov2.ProviderCode不能同时小于和等于   prov1.ProviderCode。

让它工作