PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Hibernate Distinct mit order by

Es ist nicht sinnvoll, nach einer Spalte zu sortieren, die nicht Teil des ausgewählten distinct ist Spalten.

Da Sie keiner Sammlung beitreten, werden Ihre Datensätze sowieso unterschiedlich sein (zumindest PK wird sich unterscheiden), Sie können ganz einfach auslassen:

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

Wenn es wirklich Duplikate in der Ergebnismenge gibt und Sie sie eliminieren möchten, können Sie dies im Allgemeinen mit einer Unterabfrage erreichen:

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

Der andere Vorteil dieses Ansatzes ist, dass er wahrscheinlich leistungsmäßig besser ist als distinct Das Ändern von Zeilen ist normalerweise eine teure Operation in der Datenbank.