sql >> Databasteknik >  >> RDS >> PostgreSQL

Viloläge Distinkt med ordning efter

Det är inte meningsfullt att sortera efter en kolumn som inte är en del av den valda distinct kolumner.

Eftersom du inte går med i en samling kommer dina poster att vara distinkta ändå (åtminstone PK kommer att skilja sig), du kan bara utelämna distinkt:

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

I allmänhet, när det verkligen finns dubbletter i resultatuppsättningen och du vill eliminera dem, kan du uppnå det med en underfråga:

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

Den andra fördelen med detta tillvägagångssätt är att det förmodligen är bättre prestandamässigt, som distinct att rader är vanligtvis en dyr operation i databasen.



  1. PHP rekursiv funktion för att ta bort alla underordnade noder orsakar stackoverflow

  2. Vilken är snabbare en enda stor fråga eller få små frågor?

  3. Varför MySQL-retur alltid är 1 i C#-kod men inte när jag testar i lagrad procedur?

  4. Implementera inkrementella klientuppdateringar med radversioner i Postgres