好的,我正在进行自我查询以抑制视图的重复项。我正在使用的代码是:
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。但它非常通用,并没有使用别名显示完整的“真实”查询。
答案 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。
让它工作