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
)
我正在尝试恢复两个列值出现不止一次的行。请注意,这不是优先事项。例如,在 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
)