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的列,它也在LEFT OUTER JOIN中被引用,并且该列不会导致错误。
删除别名projectele1_无效。
对我而言,这看起来像一个非常简单的SQL语句。我无法想象它有什么问题,错误信息根本没有帮助。任何想法可能是SQL的错误?
答案 0 :(得分:3)
您的SQL语法是错误的。如果您将projectele1_.id
添加到group by子句中它将起作用。只有聚合函数在select语句中使用group by子句。或者如果从select中删除projectele1_.id
它将会工作得很好。
答案 1 :(得分:0)
我的错误。我应该多次阅读错误信息。 projectele1_id不在group by子句中。 MS SQL不允许在选择列表中包含此类列。这似乎是一致性检查。 太糟糕了,虽然HQL的使用导致了SQL Server中的这种异常但在MySQL服务器中没有导致