以下示例只是一个测试,但我想可以构建一些实际上有意义的东西。无论如何,我不明白为什么它不起作用。 MySQL在'having clause'中报告 [42S22] [1054]未知列'document0_.age'。我用许多其他数据库(PostgreSQL,DB2,Oracle,SQL Server等)测试了相同的查询,MySQL是唯一抱怨这个。
有人可以向我解释为什么这不起作用?我知道我可以将age列放入GROUP BY子句并完成它,但这是生成的代码,我需要添加一个处理这个MySQL问题的特殊情况,这就是为什么我想更好了解这个问题。这只是CASE WHEN语句的问题,还是其他表达式(例如嵌套函数调用)也可能导致这样的错误?
select count(versions1_.id) as col_0_0_
from Document document0_
left outer join document_version versions1_ on document0_.id=versions1_.document_id
group by
document0_.id,
case when document0_.id=document0_.age and document0_.age<4 then '2' when document0_.id=4 then '4' else '3' end
having
case when document0_.id=document0_.age and document0_.age<4 then '2' when document0_.id=4 then '4' else '3' end='2'
编辑:我刚试过函数调用是否也有问题,实际上它们确实存在问题。以下错误消息也会失败。
select count(versions1_.id) as col_0_0_
from Document document0_
left outer join document_version versions1_ on document0_.id=versions1_.document_id
group by
document0_.id,
POW(document0_.id,document0_.age)
having
POW(document0_.id,document0_.age)=2
我开始相信MySQL没有检测到表达式是相等的,因此在执行HAVING子句部分时会尝试重新计算它们。我是对的吗?
答案 0 :(得分:0)
在SUM
子句中添加HAVING
后,它正在运行,如下所示:
HAVING SUM(case when document0_.id=document0_.age and document0_.age<4
then '2'
when document0_.id=4 then '4' else '3'
end)='2'
请尝试一下,如果有效的话。我已经用类似的情况检查了它,它也适用于你的情况。
请点击此链接获取详细信息Unknown column in 'having clause'