選択した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
として、おそらくパフォーマンスの面で優れていることです。 通常、行の作成はデータベースでのコストのかかる操作です。