ऐसे कॉलम द्वारा ऑर्डर करने का कोई मतलब नहीं है जो चयनित distinct
. का हिस्सा नहीं है कॉलम।
चूंकि आप किसी संग्रह में शामिल नहीं हो रहे हैं, वैसे भी आपके रिकॉर्ड अलग होंगे (कम से कम PK अलग होगा), आप बस विशिष्ट को छोड़ सकते हैं:
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))
सामान्य तौर पर, जब परिणाम सेट में वास्तव में डुप्लिकेट होते हैं और आप उन्हें समाप्त करना चाहते हैं, तो आप इसे एक सबक्वेरी के साथ प्राप्त कर सकते हैं:
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))
इस दृष्टिकोण का अन्य लाभ यह है कि यह संभवतः बेहतर प्रदर्शन-वार है, जैसा कि distinct
. है आईएनजी पंक्तियाँ आमतौर पर डेटाबेस में एक महंगा ऑपरेशन है।