Jpa JPQL左外部联接不执行不必要的联接
我有以下JPQL:Jpa JPQL左外部联接不执行不必要的联接,jpa,left-join,jpql,Jpa,Left Join,Jpql,我有以下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个解决方案不是选择名称并通
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和GROUPBY a.b、a.c,但它不会抛出ORA GROUPBY表达式,因为生成的sql检索所有行,但GROUPBY仅按ID)
左连接是必要的,因为我想允许空值
非常感谢
SELECT a.b.id, a.b.name, a.c.id,a.c.name
上面隐式地在abd b、a和a与c之间创建了一个内部连接。查询应该是
select b.id, b.name, c.id, c.name
from A a
left join a.b b
left join a.c c
GROUPBY
子句没有任何意义,因为select子句中没有聚合<例如,如果您有,代码>分组依据将非常有用
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
是的,我有一个计数(a),我没有提到,因为它实际上与我的问题没有任何关系。不管怎样,这似乎真的很有帮助,非常感谢。