任何人都可以告诉我如何在HQL查询中使用distinct with order by。
我一直在寻找解决方案,但似乎找不到确切的解决方案。
这是我的HQL查询
select distinct city
from City city
where city.id is not null
and upper(city.name) != upper('Unknown')
and city.state.id =:stateId
order by upper(trim(city.name))
问题 - SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中。
答案 0 :(得分:2)
按照不属于所选distinct
列的列排序是没有意义的。
由于你没有加入一个集合,你的记录无论如何都会是不同的(至少PK会有所不同),你可以省略它们:
select distinct city
from City city
where city.id is not null
and upper(city.name) != upper('Unknown')
and city.state.id =:stateId
order by upper(trim(city.name))
通常,如果结果集中确实存在重复项并且您想要消除它们,则可以使用子查询来实现它:
select city
from City city
where city.id in (select c.id from City c join c.someCollection sc where ...)
order by upper(trim(city.name))
这种方法的另一个好处是它可能在性能上更好,因为distinct
行通常是数据库中昂贵的操作。
答案 1 :(得分:1)
使用此查询。订单不会是双倍的。你必须在一个单独使用它。希望它会对你有所帮助。
按city.name排序,表示它将使用城市名称升序。
select distinct city.name, city.id
from City city
where city.id is not null
and upper(city.name) != upper('Unknown')
and city.state.id =:stateId
order by upper(trim(city.name))