【问题标题】:Need Help Converting a SQL Query to JPQL需要帮助将 SQL 查询转换为 JPQL
【发布时间】:2020-07-28 18:38:15
【问题描述】:

到目前为止,Spring 的 JPA 存储库对我来说已经足够了,但现在我需要一个自定义查询。我为此苦苦挣扎了一天,试图了解有关 SQL、联接等的更多信息,并提出了一个本地 MySQL 查询,(我认为)它可以满足我的要求:我想找到每个“产品”的所有最新信息唯一的网址。示例:

PRODUCT
id | url                       | created_date
---------------------------------------------
 1 | http://foo.bar/products/a | 2020-04-01
 2 | http://foo.bar/products/a | 2020-04-02
 3 | http://foo.bar/products/b | 2020-04-02
 4 | http://foo.bar/products/a | 2020-04-03
 5 | http://foo.bar/products/b | 2020-04-03

RESULT
id | url                       | created_date
---------------------------------------------
 4 | http://foo.bar/products/a | 2020-04-03
 5 | http://foo.bar/products/b | 2020-04-03

这是我想出的原生 MySQL 查询:

SELECT *
FROM product t
INNER JOIN
    (SELECT url, MAX(created_date) AS Latest
    FROM product
    GROUP BY url) grouped_url 
ON t.url = grouped_url.url 
AND t.created_date = grouped_url.Latest

我尝试将其转换为 JPQL 以便使用 @Query 注释似乎很尴尬,所以我什至不会费心在此处发布它们:D 有人可以帮助我吗?

【问题讨论】:

    标签: mysql sql jpql


    【解决方案1】:

    将您的 SQL 查询转换为表单:

    SELECT *
    FROM product p1
    WHERE NOT EXISTS ( SELECT 1
                       FROM product p2
                       WHERE p1.url = p2.url
                         AND p1.created_date < p2.created_date )
    

    它与 JPQL 兼容 - 请参阅 Subqueries - EXISTS Expressions

    或者您可以在&gt;= ALL (..) 表单中使用相同的想法。

    【讨论】:

      猜你喜欢
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多