SQL查询问题

时间:2011-07-28 19:09:09

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

我正在尝试使用join从两个表中进行选择,然后按类型进行分组。我如何逃避'活跃'?

它在查询窗口(管理工作室)上抛出此错误:

错误

Msg 209, Level 16, State 1, Line 6 
Ambiguous column name 'active'. 
Msg 207, Level 16, State 1, Line 7 
Invalid column name 'zone'.

查询

select 
vendor.name,type_zone.type as zone
from dbo.vendor join dbo.type_zone
on fkType_zoneID = pkType_ZoneID 
where active = 1
GROUP BY zone

4 个答案:

答案 0 :(得分:1)

您的错误意味着两个表中都存在“活动”列名称。您需要在测试中将其指定为type_zone.activevendor.active,以确定哪个表应测试其名称列。

您的GROUP BY子句存在缺陷,因为您的SELECT子句中没有聚合函数。

答案 1 :(得分:1)

使用表名:

限定活动列

vendor.activetype_zone.active

(我不确定活动列所指的那些表中的哪一个。这就是服务器给你错误的原因;它也说不出来。)

答案 2 :(得分:1)

active出现在两个表中。您需要确定要使用的active列。例如

WHERE vendor.active = 1

您不能在GROUP BY子句中使用列别名。将zone更改为type_zone.type

答案 3 :(得分:0)

取决于哪个表处于活动状态。如果它在供应商中,则以下内容应该起作用:

select 
vendor.name,type_zone.type as zone
from dbo.vendor inner join dbo.type_zone
on fkType_zoneID = pkType_ZoneID 
where dbo.vendor.active = 1
GROUP BY type_zone.type

如果您对表进行别名,则更容易处理此问题,如下所示:

select 
v.name,t.type as zone
from dbo.vendor v inner join dbo.type_zone t
on v.fkType_zoneID = t.pkType_ZoneID 
where v.active = 1
GROUP BY t.type