尝试子查询时出现不明确的列名错误

Posted

技术标签:

【中文标题】尝试子查询时出现不明确的列名错误【英文标题】:Getting an Ambiguous column name error when trying to subquery 【发布时间】:2021-03-05 01:31:03 【问题描述】:

提示是假设风险“1”设施每年至少需要进行 3 次类型检查。显示 2013 年未能满足此要求且至少有 1 次 Canvass 类型检查失败的设施。显示设施名称以及 2013 年有多少 Canvass 检查。提示:使用子查询

这是我的代码

SELECT DBAName, COUNT(*)
FROM FoodInspectionOriginal, Organization
WHERE Risk = 1 AND [Inspection Type] IN (SELECT [Inspection Type] FROM FoodInspectionOriginal WHERE [Inspection Type] = 'Canvass' AND [Inspection Date] = Year(2013))
GROUP BY DBAName;

我得到这是输出

消息 209,第 16 级,状态 1,第 3 行

不明确的列名“风险”。

【问题讨论】:

错误意味着 FoodInspectionOriginal 和 Organization 表具有相同的列名:Risk 进化——没有人应该使用old-style joins。 【参考方案1】:

我只会使用聚合。假设表foodinspectionoriginal的表结构如下:

dbaname           -- name of the facility
inspection_date   
inspection_type   -- "Canvass", ...
inspection_status -- "successful", "failed"

查询可以表述如下:

select dbaname,
    sum(case when inspection_type = 'Canvass' and inspection_status = 'failed' then 1 else 0 end) as cnt_failed_canvass
from foodinspectionoriginal
where 
    risk = 1 
    and inspection_date >= '20130101' 
    and inspection_date <  '20140101'
group by dbaname 
having 
    count(*) < 3 
    and sum(case when inspection_type = 'Canvass' and inspection_status = 'failed' then 1 else 0 end) > 0

【讨论】:

以上是关于尝试子查询时出现不明确的列名错误的主要内容,如果未能解决你的问题,请参考以下文章

在数据块上运行 sql 查询时出现不匹配错误

使用 case when 时出现 SQL (Redshift) 错误 - 不支持这种类型的相关子查询模式

Hibernate:在子选择查询中使用 IN 子句时出现错误

子查询在获取过去 X 周的数据时出现太多列错误?

MYSQL 更新与 WHERE SELECT 子查询错误

加入两个包含 SUM() 函数的子查询时出现无效操作错误