PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Hibernate Distinto com ordem por


Não faz sentido ordenar por uma coluna que não faça parte do distinct selecionado colunas.

Como você não está participando de uma coleção, seus registros serão distintos de qualquer maneira (pelo menos o PK será diferente), você pode apenas omitir distintos:
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))

Em geral, quando realmente há duplicatas no conjunto de resultados e você deseja eliminá-las, pode fazê-lo com uma subconsulta:
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))

O outro benefício dessa abordagem é que provavelmente é melhor em termos de desempenho, pois distinct A criação de linhas geralmente é uma operação cara no banco de dados.