sql >> Database >  >> RDS >> PostgreSQL

Hibernate Distinct met bestelling door

Het heeft geen zin om te ordenen op een kolom die geen deel uitmaakt van de geselecteerde distinct kolommen.

Aangezien u niet deelneemt aan een verzameling, zullen uw records hoe dan ook onderscheiden zijn (in ieder geval zal PK verschillen), u kunt gewoon onderscheiden:

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 het algemeen, als er echt duplicaten in de resultatenset zijn en u wilt deze verwijderen, kunt u dit bereiken met een subquery:

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

Het andere voordeel van deze aanpak is dat het waarschijnlijk beter is qua prestaties, omdat distinct rijen maken is meestal een dure operatie in de database.



  1. MySQL-waarschuwing:onjuiste tekenreekswaarde:'\x96'

  2. Wat doet SUBSIDIEGEBRUIK OP SCHEMA precies?

  3. PostgreSQL:zes niet-zo-gemakkelijke stukjes

  4. Onverwacht resultaat van multiset-toewijzing in Oracle SQL