2

考虑 HQL 中的以下查询:

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

我需要从选择内的选择查询中以布尔值形式返回信息,其中包含是否有任何满足该查询的条目的信息。

上面的查询在 SQL 中可以正常工作,但是休眠给了我一个错误。我不能将比较运算符与聚合函数一起使用。

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

4

1 回答 1

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;
于 2012-06-15T12:14:32.343 回答