【发布时间】:2012-01-18 02:44:46
【问题描述】:
我正在尝试移植一个适用于 Hibernate HQL 的 MySQL 查询,这对我来说都是非常新的,所以我愿意接受任何类型的提示(错误的方式,错误的结构,改变一切......;))
两个表A和B。(结构分解,仅相关部分)
A 包含条目,每个条目都有一个唯一的 ID。 B 引用这些 ID 并持有一个类似布尔值的标记 (TINYINT(1))。
我想知道 A 中的每一行在 B 中有多少行,其中 Id 来自 A 的 Row 和 Marker == True (1)。
我的 MySQL 查询是这样的:
SELECT A.id, COUNT( IF( B.marker = 1, 1, NULL ) ) AS markerTrue, COUNT( IF( B.marker =0, 1, NULL ) ) AS markerFalse FROM A LEFT JOIN B ON B.a_id = A.id GROUP BY A.id
它可以工作,我将它移植到这个(HQL):
SELECT A.id, COUNT(CASE WHEN B.marker = 1 THEN 1 ELSE NULL END) as markerTrue, COUNT(CASE WHEN B.marker = 0 THEN 1 ELSE NULL END) as markerFalse FROM A LEFT JOIN B WITH B.a_id = A.id GROUP BY A.id
这会引发异常:
org.hibernate.hql.ast.QuerySyntaxException:意外令牌:CASE 附近 ...
在日志中,也有
org.hibernate.hql.ast.ErrorCounter - 第 1:19 行:意外令牌:CASE antlr.NoViableAltException:意外令牌:CASE
但这只是相同的内部错误。
有没有办法在 HQL 中做到这一点?还有其他更好的方法吗,比如重组表格,专家对此有何看法?
【问题讨论】: