我正在尝试使用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
答案 0 :(得分:1)
您的错误意味着两个表中都存在“活动”列名称。您需要在测试中将其指定为type_zone.active
或vendor.active
,以确定哪个表应测试其名称列。
您的GROUP BY
子句存在缺陷,因为您的SELECT
子句中没有聚合函数。
答案 1 :(得分:1)
使用表名:
限定活动列 vendor.active
或type_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