मैं मूल रूप से NHibernate ICriteria इंटरफेस के साथ इस क्वेरी बनाने के लिए कोशिश कर रहा हूँ पर शामिल हों PrimaryKey, NonAggregateColumn: n AnotherTableNHibernate 2.1:</p> <p>SomeTable 1: वाम उर्फ (ICriteria) के साथ सबक्वेरी
SomeTable स्तंभ होते हैं PrimaryKey, ForeignKey, AnotherNonAggregate, YetAnotherNonAggregate
SELECT
table1.NonAggregateColumn,
subquery.SubQueryAggregate1,
subquery.SubQueryAggregate2
FROM
SomeTable AS table1
LEFT JOIN
(
SELECT
table2.ForeignKey,
COUNT(table2.AnotherNonAggregate) AS SubQueryAggregate1,
AVG(table2.YetAnotherNonAggregate) AS SubQueryAggregate2
FROM AnotherTable AS table2
GROUP BY (table2.ForeignKey)
) AS subquery ON subquery.ForeignKey = table1.PrimaryKey
:
AnotherTable स्तंभ होते हैं
यह स्पष्ट है कि प्रोजेक्शन सबक्वायरी का उपयोग करना बहुत ही कुशल नहीं है, क्योंकि एसक्यूएल को तालिका को दो बार स्कैन करना है (प्रति एक प्रोजेक्शन सबक्वायरी)।
एकाधिक ग्रुप बीईएस का उपयोग करना भी कुशल नहीं है।
क्या इसके लिए कोई समाधान है? अब तक मैं कच्चे एसक्यूएल का उपयोग करने का प्रयास कर रहा हूं लेकिन जटिल रिपोर्टों के लिए यह अनावश्यक हो रहा है।
क्या आप अपना प्रश्न स्पष्ट कर सकते हैं? जो क्वेरी आप दिखा रहे हैं वह देशी वर्ग है। क्या यह पहले से ही अपेक्षित डेटा वापस कर देता है? आप इसे मानदंडों में बदलना चाहते हैं। एचक्यूएल क्यों नहीं? –
उल्लेख करने के लिए भूल गए: आप एक ओआरएम का उपयोग कर रहे हैं। तो एक प्रश्न लिखने के लिए, आपको टेबल और विदेशी कुंजी के बारे में बहुत अधिक परवाह नहीं है। संस्थाओं और मानचित्रण परिभाषाओं में बहुत अधिक महत्वपूर्ण हैं। तो ये टेबल मैप किए गए कैसे हैं? क्या कुछटेबल में कोई सूची है? क्या एटटेबल में कोई संदर्भ है? अथवा दोनों? –
हां, मूल क्वेरी एक रिपोर्ट के लिए आवश्यक डेटा देता है। मैं NHibernate 2.1 का उपयोग कर रहा हूँ। मानदंड एपीआई को NHLambdaExtensions (जिसे मैं भी उपयोग कर रहा हूं) के माध्यम से मजबूत टाइपिंग क्षमता के कारण प्राथमिकता दी जाती है। मैं एसक्यूएल स्पष्ट और पढ़ने में आसान बनाने के लिए कुछटेबल, अन्यटेबल नामों का उपयोग कर रहा हूं। यह असली वस्तुओं का एक कल्पित दर्पण है। कुछटेबल मैप किए गए ऑब्जेक्ट में एक और टूटे ऑब्जेक्ट्स का एक से अधिक संग्रह है। –