PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Hibernate Distinct avec ordre par

Cela n'a pas de sens de trier par une colonne qui ne fait pas partie du distinct sélectionné colonnes.

Puisque vous ne vous joignez pas à une collection, vos enregistrements seront de toute façon distincts (au moins PK sera différent), vous pouvez simplement omettre distinct :

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))

En général, lorsqu'il y a vraiment des doublons dans le jeu de résultats et que vous souhaitez les éliminer, vous pouvez y parvenir avec une sous-requête :

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))

L'autre avantage de cette approche est qu'elle est probablement meilleure en termes de performances, car distinct la création de lignes est généralement une opération coûteuse dans la base de données.