HQL Select 其中 Row 出现不止一次

HQL Select where Row appears more than once

我正在尝试恢复两个列值出现不止一次的行。请注意,这不是优先事项。例如,在 table..

ID    Name    Country
1     Dave    UK
2     Jim     UK
3     Dave    UK
4     Dave    US
5     Jim     US

然后它将 return 第 1 行和第 3 行,但 none 其他行。这是因为 "Dave" 和 "UK" 的组合只出现在那些行中。我正在努力实现一个 HQL 查询来获得它。为了让事情顺利进行,我尝试仅按名称分组:

from Runner r group by r.name having count(r.name) > 1

但我收到以下异常:

Column "RUNNER0_.ID" must be in the GROUP BY list;

我了解了为什么这在逻辑上是必要的,所以现在我不知道我打算如何实现这个功能。

我正在使用 Grails 2.4.4,JDK7,Hibernate 4.3.6.1

一种方法是使用子查询:

from Runner r
where (r.name, r.country) in 
   (select name, country from Runner group by name, country having count(*) > 1)

您可以尝试使用 exists 和子查询搜索重复项。

select r 
from Runner r 
where exists
(
    select rn
    from Runner rn
    where rn.id <> r.id 
    and rn.name = r.name
    and rn.country = r.country
)