当前位置: 首页 > 知识库问答 >
问题:

HQL是否可以对另一个查询的结果集进行选择?

薄高懿
2023-03-14

HQL是否可以对另一个查询的结果集进行选择?例如:

SELECT COUNT(*) FROM (SELECT * FROM Table)

我可以在SQL中完成,但当我在HQL中尝试上述操作时,它只显示了语法错误“意外标记:(靠近第1行,第22列…”

共有3个答案

闽高峯
2023-03-14

不可能按照您的意愿使用子查询。一种方法是使用不同的方式:

SELECT COUNT(DISTINCT t.id) FROM table t INNER JOIN t.list l
     WHERE t.status = 'ST1' AND l.status = 'ST2'"

我用内连接表示选择性重复

穆建华
2023-03-14

即使数据库支持,也无法在HQL的from子句中执行子查询,我将查询作为存储过程放入sql中,然后在HQL中调用该过程,从而解决了这个问题。例如:

将过程插入sql:

DELIMITER $$
CREATE PROCEDURE `procedure_name`(
  `arg_name` INT,
) BEGIN
     your query here
END;
$$
DELIMITER ;

然后,如果使用hibernate,请从java代码中调用此过程,如下所示:

Query query = session.createSQLQuery("CALL procedure_name(:arg_name)");
query.setParameter("arg_name", args);
List list = query.list();

希望这能帮到你。

萧修永
2023-03-14

HQL确实支持子查询,但是它们只能出现在选择或在哪里子句中。您提供的示例最好在HQL中编写为直接语句。例如:

select count(*) from table t  (where table is the entity name)

对于支持子选择的数据库,Hibernate支持查询中的子查询。子查询必须用括号括起来(通常由SQL聚合函数调用括起来)。甚至允许相关子查询(引用外部查询中别名的子查询)。

实例

from DomesticCat as cat
where cat.name not in (
    select name.nickName from Name as name
)
 类似资料:
  • 问题内容: HQL可以在另一个查询的结果集上进行选择吗? 例如: 我可以在SQL中完成此操作,但是当我在HQL中尝试以上操作时,它只是向我显示语法错误“意外的令牌:(靠近第1行,第22列…”) 问题答案: HQL确实支持子查询,但是它们只能出现在select或where子句中。您提供的示例最好以HQL的直接陈述形式编写。例如: 如果查询所涉及的语句比复杂,我建议将该逻辑放入视图中,然后根据该视图创

  • 问题内容: 我有一个查询。现在,此查询当然返回一个结果集,我想要的是查询此查询的结果集,例如,我只希望上述查询具有唯一的名称。我应该提一下,我知道我可以在Query1中使用,但这只是一个示例,我的实际情况有些不同,我想知道的是是否可以查询上一个查询的结果集。我正在使用SQL Server 2012。 问题答案: 您可以使用该子句

  • 我正在尝试查找一个查询唯一的名称列表,并排除两个查询结果之间的共同名称。例如,我想要学生A、B和C所选课程的名称,并从该列表中排除学生D和E所选的课程。在这个问题的答案的帮助下(Neo4j Cypher:从结果中排除某些节点),我尝试了这个密码代码,它是有效的,但我得到的结果是节点。我希望它是一个名称列表,而不是节点。 非常感谢。

  • 先决条件:Java7和SQLServer 2016。 我从SQL Server获取存储过程返回的结果集 结果集: 我创建了一个POJO类来保存结果集。我想创建一个Hashmap对象,其中Key为,,,Value为List,其中包含给定Key的所有值。 那么,我可以使用HashMap做到这一点吗?我想我可以使用包含其他地图作为价值的地图。但不确定如何使公共键值项作为列表。 Java类: HoursQ

  • 我有两个表TABLE_A,列名为COLUMN1 COLUMN2 COLUMN3 COLUMN 4 COLUM5 abc def ghi jkl mno 123 456 789 001 121 TABLE_B列名为COLUMN6 COLUMN7,其数据为 专栏5 124 第4列bca 第3列aaa 列5 BBB 所以我将Table_A的列名作为Table_B中的数据 所以我想在一个查询中做这样的事情

  • 问题内容: 如果行达到一定数量,我想压缩结果。 然后,客户端程序将解压缩结果和过程。 这是具有客户端/服务器体系结构的桌面,某些客户端通过vpn连接。 客户端连接后,它将向服务器发送数据。服务器完成处理后,客户端将从服务器下载更新的数据。 客户位于几个城镇,平均50-100公里。离开。他们将使用vpn通过Internet连接。但这是使用vpn或其他方式实施的最初计划,但尚未实施。 问题答案: 有一