sql >> Databáze >  >> RDS >> PostgreSQL

Hibernate Rozlišuje se podle pořadí

Nemá smysl řadit podle sloupce, který není součástí vybraného distinct sloupce.

Vzhledem k tomu, že se nepřipojujete ke sbírce, vaše záznamy budou stejně odlišné (alespoň PK se bude lišit), můžete pouze vynechat odlišné:

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

Obecně platí, že když se v sadě výsledků skutečně vyskytují duplikáty a chcete je odstranit, můžete toho dosáhnout pomocí dílčího dotazu:

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

Další výhodou tohoto přístupu je, že je pravděpodobně lepší z hlediska výkonu, protože je distinct vkládání řádků je obvykle nákladná operace v databázi.



  1. Nelze volat prostředek JNDI v souboru persistence.xml

  2. Jak úplně odstranit MySQL pomocí konfiguračních a knihovních souborů?

  3. Výjimka Java JDBC MySQL:Operace není povolena po uzavření ResultSet

  4. Chyba při aktualizaci připojení