【问题标题】:Rewrite self join to JPQL将自联接重写为 JPQL
【发布时间】:2012-03-20 22:37:35
【问题描述】:

我需要将此自联接转换为 JPQL:

SELECT s1.*
FROM site AS s1
JOIN (SELECT site_type, MAX(last_update_date) AS LastUpdate
      FROM site
      WHERE site.last_update_date > "2011-02-27 16:57:53"
      GROUP BY site_type) AS s2
ON s1.site_type = s2.site_type
AND s1.last_update_date = s2.LastUpdate
ORDER BY s1.last_update_date DESC

编辑:解决方案:

SELECT s1
FROM Site s1 
WHERE s1.lastUpdateDate = ( SELECT MAX(s2.lastUpdateDate) 
                            FROM Site s2 
                            WHERE s1.siteType = s2.siteType)
AND s1.lastUpdateDate > "2011-02-27 16:57:53"
ORDER BY s1.lastUpdateDate DESC

我在 lastUpdateDate 上使用了额外的 select 语句,而不是自加入。

编辑 2:这是一个更好的解决方案,因为它还包含 NULL 值。唯一的缺点是我不能使用 TypedQuery。

SELECT s.id, s.url, s.siteType, MAX(s.lastUpdateDate) as maxLastUpdateDate 
FROM Site s 
GROUP BY s.siteType 
HAVING (maxLastUpdateDate < "2011-02-27 16:57:53" OR maxLastUpdateDate IS NULL)

【问题讨论】:

    标签: sql join jpql greatest-n-per-group self-join


    【解决方案1】:
    SELECT s.id, s.url, s.siteType, MAX(s.lastUpdateDate) as maxLastUpdateDate 
    FROM Site s 
    GROUP BY s.siteType 
    HAVING (maxLastUpdateDate < "2011-02-27 16:57:53" OR maxLastUpdateDate IS NULL)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-26
      • 2020-07-28
      • 2012-01-02
      • 2021-09-12
      • 2018-09-04
      • 2013-08-19
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多