在 JPA 的 SQL 查询中的 FROM 语句中包含子查询
Posted
技术标签:
【中文标题】在 JPA 的 SQL 查询中的 FROM 语句中包含子查询【英文标题】:Including a subquery within the FROM statement in a SQL query in JPA 【发布时间】:2019-10-01 19:45:40 【问题描述】:我有一个 Spring Boot 应用程序。在其中,我有一个 SQL 查询,它需要创建一个子查询,将该子查询的结果与另一个表进行内部连接,然后从该内部连接的结果中进行选择。但显然 JPA 不允许您在 FROM 子句中使用子查询(我假设既不使用 JPQL 也不使用 Criteria API)。有没有办法解决?
我曾考虑将子查询的结果存储在临时实体中(最好不要创建可持久保存到数据库的表),然后从存储在这些实体中的数据中进行选择。但我不确定如何使用 Spring 来做到这一点。我想要比创建缓存更“临时”的东西,因为在执行查询后子查询的结果会从内存中消失。
这是一个类似于我想要做的 SQL 查询:
SELECT g1.name, g1.publisher, g1.price, g1.released_at
FROM games AS g1
INNER JOIN (
SELECT released_at, MAX(price) as price
FROM games
GROUP BY released_at
) AS g2
ON g2.released_at = g1.released_at AND g2.price = g1.price;
我期待此处描述的 SQL 查询的结果: http://bernardoamc.github.io/sql/2015/05/04/group-by-non-aggregate-columns/
【问题讨论】:
您想使用此查询解决的真正问题是什么?你能再描述一点吗?我猜你想找到每个发布日期都有最高价格的游戏。它是否正确?如果是,请查看我的解决方案。 【参考方案1】:我认为你需要这个查询:
Select g from games g where not exists (
Select g1 from games g1
where g1.released_at = g.released_at and g1.price >= g.price
)
【讨论】:
以上是关于在 JPA 的 SQL 查询中的 FROM 语句中包含子查询的主要内容,如果未能解决你的问题,请参考以下文章