Nemá smysl řadit podle sloupce, který není součástí vybraného distinct
sloupce.
Vzhledem k tomu, že se nepřipojujete ke sbírce, vaše záznamy budou stejně odlišné (alespoň PK se bude lišit), můžete pouze vynechat odlišné:
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))
Obecně platí, že když se v sadě výsledků skutečně vyskytují duplikáty a chcete je odstranit, můžete toho dosáhnout pomocí dílčího dotazu:
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))
Další výhodou tohoto přístupu je, že je pravděpodobně lepší z hlediska výkonu, protože je distinct
vkládání řádků je obvykle nákladná operace v databázi.