Hibernate(HQL)生成了以下SQL,我为其插入了参数:
select
sum(activity0_.calculated_work) as col_0_0_
, employee2_.id as col_1_0_
, projectele1_.id as col_2_0_
from
activity activity0_
inner join generic_object activity0_1_ on activity0_.id=activity0_1_.id
left outer join project_element projectele1_ on activity0_.project_element_id=projectele1_.id
left outer join employee employee2_ on activity0_.owner_id=employee2_.id
left outer join org_unit orgunit3_ on employee2_.org_unit_id=orgunit3_.id
where
activity0_1_.deleted=0 and
activity0_.client_id=22
group by
employee2_.id order by SUM(activity0_.calculated_work) DESC
错误消息:列‘project_element.id’在选择列表中无效,因为它既未包含在聚合函数中,也未包含在GROUP BY子句中。
我直接在SQL Server Studio中执行此SQL,结果相同。我评论了这句话:
, projectele1_.id as col_2_0_
然后,该SQL被SQL Server接受
表PROJECT_ELEMENT肯定有一个名为id的列,它也在左外部连接中被引用,在那里该列不会导致错误。
删除别名项目1_没有任何效果。
对我来说,这看起来像是一条非常简单的SQL语句。我无法想象它出了什么问题,错误消息一点帮助也没有。你知道SQL可能出了什么问题吗?
2条答案
按热度按时间u59ebvdq1#
您的SQL语法错误。如果您将
projectele1_.id
添加到GROUP BY子句中,它将正常工作。只有聚合函数在带有GROUP BY子句的SELECT语句中工作。或者,如果您从SELECT中删除projectele1_.id
,它将正常工作。mfuanj7w2#
是我的错。我应该已经多次阅读错误消息。
projectele1_id
不在group by
子句中。MS SQL不允许将这样的列包括在选择列表中。这似乎是一种一致性检查。然而,糟糕的是,HQL的使用在SQL Server中导致了这样的异常,但在MySQL Server中却没有。