Det är inte meningsfullt att sortera efter en kolumn som inte är en del av den valda distinct
kolumner.
Eftersom du inte går med i en samling kommer dina poster att vara distinkta ändå (åtminstone PK kommer att skilja sig), du kan bara utelämna distinkt:
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))
I allmänhet, när det verkligen finns dubbletter i resultatuppsättningen och du vill eliminera dem, kan du uppnå det med en underfråga:
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))
Den andra fördelen med detta tillvägagångssätt är att det förmodligen är bättre prestandamässigt, som distinct
att rader är vanligtvis en dyr operation i databasen.