我有一个查询在我的查询的LEFT JOIN子句中使用子选择
每次运行查询时都会出现org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: (
错误。使用'('是我的子选择的左括号。
我的查询看起来像是:
SELECT a, b, c
FROM table1 as t1
INNER JOIN t1.table2 as t2
INNER JOIN t1.table3 as t3
INNER JOIN t3.table4 as t4
LEFT JOIN ( //<- this one gives the error
SELECT d, e, f
FROM table9 as t9
....
) as xx WITH xx.prop = t2.prop and xx.prop2 = t4.prop
WHERE t1.yy = true and t1.zz = '0'
GROUP BY t2.column
我在sql中有相同的查询,当我在MySQL工作台中运行它时它工作并返回我需要的数据。当我使用HQL版本时,它会在打开子查询的(
上出错。
这种子查询在HQL中是否可行,或者我应该使用SQL吗?
如果是的话,我做错了什么?
修改:
我尝试将WITH
更改为ON
,但仍然会出现同样的错误。
内连接工作正常,因为这是带有Java配置的HQL,它自动匹配外键,因此我不需要在每个连接上使用on / witch子句。
EDIT2 :
如果我对左边加入进行评论,则查询有效,所以不是缺少on
或使用with
而不是导致我麻烦的
答案 0 :(得分:0)
有几处变化:
您的INNER JOIN
查询不正确,您需要指定要加入的列表。
FROM table1 as t1
INNER JOIN t1.table2 as t2 // missing ON
相反,你应该写一些东西
FROM table1 as t1
INNER JOIN t1.table2 as t2 ON t1.col1=t2.col1
然后,在您的子查询之后,您使用了WITH
,这是错误的,您应该使用ON
) as xx WITH xx.prop = t2.prop
应该是
) as xx ON xx.prop = t2.prop
此外,在编写
时似乎缺少=
and xx.prop2 t4.prop
答案 1 :(得分:0)
当您加入该表时,您需要使用ON
关键字。
LEFT JOIN (
SELECT d, e, f
FROM table9 as t9
....
) as xx ON xx.prop = t2.prop and xx.prop2 = t4.prop
你也忘记了第二个属性的加入中的=
。
编辑:
子查询必须用括号括起来(通常用SQL 聚合函数调用)。甚至相关的子查询(子查询 允许在外部查询中引用别名。注意HQL 子查询只能出现在select或where子句中。
由此,您不能在from子句中使用子查询。