2013-03-07 9 views
40

मैं एक प्रश्न है कि कुछ इस तरह दिखता है:DISTINCT कीवर्ड का उपयोग करते हुए इस त्रुटि का कारण बनता है: नहीं एक चयनित अभिव्यक्ति

SELECT DISTINCT share.rooms 
FROM Shares share 
    left join share.rooms.buildingAdditions.buildings.buildingInfoses as bi 
... //where clause omitted 
ORDER BY share.rooms.floors.floorOrder, share.rooms.roomNumber, 
     share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent 

निम्नलिखित में से कौन अपवाद में परिणाम:

Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression 

अगर मैं हटाने DISTINCT कीवर्ड, क्वेरी बिना किसी समस्या के चलती है। अगर मैं खंड द्वारा ऑर्डर हटा देता हूं, तो क्वेरी बिना किसी समस्या के चलती है। दुर्भाग्यवश, मुझे डुप्लीकेट के बिना ऑर्डर किए गए परिणाम सेट को प्रतीत नहीं होता है।

+1

धन्यवाद @ प्रतिक्रिया के लिए लामाक। यह मुझे स्पष्ट नहीं है कि DISTINCT डीबी को अन्य कॉलमों को अनदेखा क्यों करता है, क्योंकि यह DISTINCT के बिना उन्हें अनदेखा नहीं करता है। हालांकि, यह महत्वपूर्ण है कि, मैं आदेशित, डुप्लिकेट मुक्त परिणाम सेट कैसे प्राप्त करूं? – Ken

+2

तो आप उन्हें कैसे आदेश देना चाहते हैं? यदि आप कॉलम 'share.rooms' के लिए डुप्लिकेट मुक्त परिणाम चाहते हैं, तो आपको यह समझने की आवश्यकता है कि उसी कमरे से ** ** **' floorOrder' या 'roomNumber' या किसी अन्य कॉलम के लिए अलग-अलग मान हो सकते हैं, आप कैसे चाहते हैं उन्हें आदेश दिया जा सकता है ?, उन के न्यूनतम मूल्य से, अधिकतम? – Lamak

+0

अब मैं देखता हूं। एक बार फिर धन्यवाद। – Ken

उत्तर

65

आप अपने परिणाम उन कॉलम के साथ ऑर्डर करने का प्रयास कर रहे हैं जिनकी गणना नहीं की जा रही है। यदि आपके पास DISTINCT नहीं है, तो यह कोई समस्या नहीं होगी, लेकिन चूंकि आपकी क्वेरी मूल रूप से केवल share.rooms कॉलम द्वारा समूहीकृत हो रही है, तो यह परिणाम अन्य कॉलम के साथ सेट किया जा सकता है जिसमें share.rooms एक के लिए एकाधिक मान हो सकते हैं?

संबंधित मुद्दे