gpt4 book ai didi

sql - 如何选择HQL中是否存在行

转载 作者:行者123 更新时间:2023-12-02 04:55:15 25 4
gpt4 key购买 nike

编辑:具体讨论针对无表的查询。是的,我可以使用存在,但我必须这样做

select case when exists (blah) then 1 else 0 end as conditionTrue
from ARealTableReturningMultipleRows
<小时/>

在 T-SQL 中我可以这样做:

select case when exists(blah) then 1 else 0 end as conditionTrue

在 Oracle 中我可以这样做:

select case when exists(blah) then 1 else 0 end as conditionTrue from DUAL

如何在 HQL 中实现同样的目标?

select count() 似乎是第二好的选择,但如果不需要的话,我不想处理表中的每一行。

最佳答案

简短回答:我相信这是不可能的。

我的推理:

根据Where can I find a list of all HQL keywords? Hibernate 项目并未在其网站上发布 HQL 语法,但它在 Hibernate 完整发行版中以 .g ANTLR 文件形式提供。

我对 ANTLR 中的 .g 文件没有太多经验,但您可以在文件 (hibernate-distribution-3.6.1.Final/project/core/src/main/antlr/hql.g):

selectFrom!
: (s:selectClause)? (f:fromClause)? {
// If there was no FROM clause and this is a filter query, create a from clause. Otherwise, throw
// an exception because non-filter queries must have a FROM clause.
if (#f == null) {
if (filter) {
#f = #([FROM,"{filter-implied FROM}"]);
}
else
throw new SemanticException("FROM expected (non-filter queries must contain a FROM clause)");
}

其中明确指出有些 HQL 查询没有 FROM 子句,但如果这是一个过滤查询,则可以接受。再说一次,我不是 HQL/Hibernate 方面的专家,但我相信过滤器查询不是完整的查询,而是您使用 session.createFilter 定义的内容(请参阅 How do I turn item ordering HQL into a filter query? ),所以这让我认为没有办法省略 FROM 子句。

关于sql - 如何选择HQL中是否存在行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4891384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com