我有以下JPQL:
SELECT a.b.id, a.b.name, a.c.id,a.c.name
left join a.b left join a.c
group by a.b.id,a.b.name,a.c.id,a.c.name
现在b和c都引用同一个表。 生成的SQL正在执行我询问的左连接,另一个连接是a.b.name和a.c.name (这是不必要的,因为左连接包含名称,并且它检索的结果比预期的多) 如何使生成的SQL不包含不必要的连接?
1出现的解决方案是不选择名称并通过不同的查询单独检索它们......但它不是我想的最优雅的方式..
(顺便说一句,我尝试用a.b,a.c选择a.b,a.c和group但是它会抛出ORA而不是按表达式分组,因为生成的sql检索所有行但是group by只能通过ID) 并且左连接是必要的,因为我想允许空值。
非常感谢。
答案 0 :(得分:0)
SELECT a.b.id, a.b.name, a.c.id,a.c.name
上面隐含地创建了abd b之间的内部联接,以及a和c之间的另一个内部联接。查询应该是
select b.id, b.name, c.id, c.name
from A a
left join a.b b
left join a.c c
group by
子句没有任何意义,因为您的select子句中没有聚合。如果你有,group by
会很有用,例如
select b.id, b.name, c.id, c.name, count(c.foo)
from A a
left join a.b b
left join a.c c
group by b.id, b.name, c.id, c.name