select语句中的HQL比较

时间:2012-06-15 11:34:09

标签: sql select hql

在HQL中考虑以下查询:

SELECT m.id, (SELECT (COUNT(*) > 0) FROM SubqueryTable...) FROM MyTable AS m;

我需要从select中的select查询返回信息作为boolean,并提供信息是否有任何条目满足该查询。

上面的查询在SQL中可以很好地翻译,但是hibernate给了我一个错误。我不能将比较运算符与聚合函数一起使用。

在HQL中从select子句中的subselect中获取信息的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

不确定如何将其转换为HQL,但您的查询可以写成:

SELECT m.id,
       (SELECT COUNT(*) FROM SubqueryTable...) > 0
         AS b
FROM MyTable AS m;

但也许您可以使用它 - 这似乎绕过了问题,因为它使用INT列:

SELECT m.id,
       CASE WHEN (SELECT COUNT(*) FROM SubqueryTable...) > 0
           THEN 1
           ELSE 0
       END AS b
FROM MyTable AS m;

您也可以尝试EXISTS

SELECT m.id,
       EXISTS (SELECT * FROM SubqueryTable...) 
         AS b
FROM MyTable AS m;

或:

SELECT m.id,
       CASE WHEN EXISTS (SELECT * FROM SubqueryTable...) 
           THEN 1
           ELSE 0
       END AS b
FROM MyTable AS m;