Sẽ không hợp lý khi sắp xếp theo cột không thuộc distinct
đã chọn cột.
Vì bạn không tham gia với một bộ sưu tập, bản ghi của bạn dù sao cũng sẽ khác biệt (ít nhất PK sẽ khác nhau), bạn chỉ có thể bỏ qua phần riêng biệt:
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))
Nói chung, khi thực sự có các bản sao trong tập hợp kết quả và bạn muốn loại bỏ chúng, bạn có thể đạt được điều đó bằng một truy vấn con:
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))
Lợi ích khác của phương pháp này là nó có thể tốt hơn về mặt hiệu suất, vì distinct
ing hàng thường là một hoạt động tốn kém trong cơ sở dữ liệu.