【问题标题】:HQL subquery in FROM clause for right joinFROM 子句中用于右连接的 HQL 子查询
【发布时间】:2015-10-22 19:34:48
【问题描述】:

我需要执行以下格式的 SQL 查询:

SELECT * FROM (SELECT * FROM TableA WHERE flag=1) AS a
RIGHT JOIN TableB AS b 
ON a.refb = b

这个想法只是将 TableA 的子集与完整的 TableB 正确连接。这样,带有标志 != 0 的 TableA 行在最终结果中仅显示一次,且值为 NULL。

现在,我认为等效的 HQL 查询将类似于以下内容:

FROM (FROM TableA ta WHERE ta.flag = 1) AS a
RIGHT JOIN a.bref b

但显然 FROM 子句不支持子查询。有没有其他方法可以获得相同的结果?

【问题讨论】:

  • 只是FROM( SELECT * FROM ....) 不会吗?您也可以在 hql 中使用全选语法
  • 别无他法,只能将它们作为本机 SQL 查询执行。 JPA 和 Hibernate 目前不支持从派生表(子查询)查询

标签: hibernate hql


【解决方案1】:
select a, b from TableA a right join a.bref b with a.flag = 1

重点是使用定义外连接额外条件的with 子句。

【讨论】:

  • 我试图在加入后添加一个 with 子句,但后来我得到了这个:org.hibernate.hql.ast.InvalidWithClauseException: with-clause expressions did not reference from-clause element to which the with - 子句关联
  • 我现在的查询(这让我得到了那个错误)更类似于这个: FROM TableA AS a RIGHT JOIN a.bref b WITH a.flag=1
【解决方案2】:

编辑:对不起,我看错了问题。

您可以在 HQL 上使用完整的 select 子句,您提供的语法由于 FROM ( FROM 而无效,只需将其更改为 FROM ( SELECT * FROM 即可使用

【讨论】:

  • 它不起作用,我收到相同的错误消息:意外令牌:(靠近第 1 行,第 6 列 [FROM (SELECT * FROM...
猜你喜欢
  • 2014-02-12
  • 2015-12-31
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多