1

好的,我正在做一个自我查询来抑制视图的重复。我正在使用的代码是:

    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 上执行查询时,我收到以下消息:

消息 208,级别 16,状态 1,第 3 行
无效的对象名称“prov1”。

我一生都无法理解为什么别名无效。我想我在这里找到了类似的问题。但它非常通用,并没有使用别名显示完整的“真实”查询。

4

4 回答 4

2

我会做更多这样的事情:

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

我想,您也可以直接进行子选择。我认为加入子查询更容易理解,但这就是我。

于 2012-08-24T18:38:31.413 回答
0

您不能使用FROM prov1- 没有名为 的表prov1。根据文档,FROM 与 *table_source* 一起使用,它是表或视图名称。

但是,您可以prov1从子查询的 where 子句中引用。

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

于 2012-08-24T14:45:00.967 回答
0
FROM   prov1

这是你的问题;既然是另一个select,你需要指定你在table哪里select from。您可以alias prov1在 that 的 where 中使用selectto join,但需要指定table, 以及一个新的别名。

于 2012-08-24T14:45:48.803 回答
0

您不能在语句中调用prov1表,您必须调用并更改 Where 语句,如 @RB 所说selectwhereServiceProfiler AS Prov3

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

让它工作

于 2012-08-24T15:09:29.610 回答