gpt4 book ai didi

java - 连接中的子查询

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:51 26 4
gpt4 key购买 nike

我需要从数据库中选择公司及其有效地址 (address.address_status_id = 1)。如果地址处于非 Activity 状态,地址列应包含空值。

下面的查询完全符合我的要求:

select c.id, c.name, a.id, a.street
from company c
left join
(select * from address where address_status_id = 1) a
on c.id = a.company_id

我在 Java/QueryDSL 中试过这个:

JPAQuery query = new JPAQuery(entityManager);
query = query.from(qCompany);
query = query.leftJoin(company.addresses, new JPASubQuery().from(qAddress)
.where(qAddress.addressStatusId.eq(AddressStatuss.ACTIVE.asBigDecimal())).list(qAddress));

但是 JPA(以及 QueryDSL 中的 JPAQuery)不支持 a subquery in a JOIN clause

有没有办法改写 SQL 语句,使其可以用 JPA/QueryDSL 表达?

编辑:如果有所不同,我们将使用 Oracle DB 和 Hibernate JPA 提供程序。

最佳答案

大概是这样

select c.id, c.name, a.id, a.street
from Company c
left join c.addresses a on a.addressStatusId = 1

在 Querydsl 中

query.from(c)
.leftJoin(c.addresses, a)
.on(a.addressStatusId.eq(1))
.list(c.id, c.name, a.id, a.street)

关于java - 连接中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564550/

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