PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Ibernazione Distinta con ordine di

Non ha senso ordinare in base a una colonna che non fa parte del distinct selezionato colonne.

Dal momento che non ti unisci a una raccolta, i tuoi record saranno comunque distinti (almeno PK sarà diverso), puoi semplicemente omettere distinti:

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

In generale, quando ci sono davvero dei duplicati nel set di risultati e vuoi eliminarli, puoi ottenerlo con una sottoquery:

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'altro vantaggio di questo approccio è che probabilmente è migliore in termini di prestazioni, in quanto distinct L'inserimento di righe è solitamente un'operazione costosa nel database.