当前位置: 首页 > 知识库问答 >
问题:

联接中的子查询

陆浩博
2023-03-14

我需要从数据库中选择具有活动地址的公司(address.address_status_id=1)。如果地址不活动,则地址列应包含NULL。

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
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));

有没有一种方法可以重新表述SQL语句,使它可以用JPA/QueryDSL表示?

编辑:我们将使用Oracle DB和Hibernate JPA provider(如果它能起作用的话)。

共有1个答案

皇甫树
2023-03-14

也许像这样

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)
 类似资料:
  • 问题内容: 我想知道,是否可以使用PostgreSQL将查询结果与自身连接? 问题答案: 您可以使用WITH来做到这一点: 或者通过创建一个包含查询的VIEW并加入该查询: 还是蛮力的方法:两次键入子查询:

  • 问题内容: 我是一个老派的MySQL用户,并且始终喜欢子查询。但是如今,每个人都使用子查询,而我讨厌它。我不知道为什么 我缺乏理论知识来自行判断是否存在差异。子查询是否与a一样好,因此不必担心吗? 问题答案: 取自MySQL手册 (13.2.10.11将子查询重写为Joins): LEFT [OUTER] JOIN可以比同等子查询更快,因为服务器可能可以更好地对其进行优化-这不仅限于MySQL S

  • 问题内容: 我重构了从另一家公司继承来的应用程序的慢速部分,以使用内部联接而不是子查询,例如: 重构查询的运行速度大约快100倍。 (约50秒,约0.3秒)我期望有所改善,但是谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于查询“(id)in()”的第二部分- vs 1带有连接的索引行: 问题答案: “相关子

  • 问题内容: 我重构了从另一家公司继承来的应用程序的慢速部分,以使用内部联接而不是子查询,例如: 重构后的查询运行速度提高了约100倍。 (约50秒,约0.3秒),我期望有所改善,但谁能解释为什么如此剧烈?where子句中使用的列均已建立索引。SQL是否在where子句中每行执行一次查询? 更新 -说明结果: 区别在于“(())中的id”查询的第二部分- vs 1带有连接的索引行: 问题答案: “相

  • 我只想检查一下QueryDSL版本3.1.1。-是否仍然不可能与子查询连接,就像这里的答案所写的:JPQL/querydsl:join subquery and get aliased column

  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。