sql >> Base de Datos >  >> RDS >> PostgreSQL

Hibernate Distinto con pedido por

No tiene sentido ordenar por una columna que no es parte del distinct seleccionado columnas.

Dado que no se está uniendo a una colección, sus registros serán distintos de todos modos (al menos PK diferirá), puede 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))

En general, cuando realmente hay duplicados en el conjunto de resultados y desea eliminarlos, puede lograrlo con una 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))

El otro beneficio de este enfoque es que probablemente sea mejor en términos de rendimiento, ya que distinct Ingresar filas suele ser una operación costosa en la base de datos.