sql - Select rows having the same features than others -
मेरे पास 3 कॉलम के साथ निम्नलिखित तालिका है: Id, FeatureName और Value:
आईडी फ़ीचर नाम मूल्य - ----------- ----- 1 एएए 10 1 एबीबी 12 1 बीबीबी 12 2 एएए 15 2 एबीबी 12 2 एसीडी 7 3 एएए 10 3 एबीबी 12 3 सीसीसी 12 .. ...........
प्रत्येक आईडी में अलग-अलग विशेषताएं हैं और प्रत्येक फ़ीचर के लिए उस आईडी का मान होता है।
मुझे एक प्रश्न लिखना है जो मुझे आईडी देता है जो कि एक ही विशेषताओं और मूल्यों को दिया है, लेकिन केवल उन लोगों को ध्यान में रखते हुए जिनके नाम 'ए' से शुरू होते हैं उदाहरण के लिए, शीर्ष तालिका में, मैं उस प्रश्न का उपयोग उन सभी आईडी के लिए कर सकता हूं जो एक ही विशेषताएँ हैं। उदाहरण के लिए, उन मूल्यों के साथ सुविधाएँ जहां आईडी = 1 का परिणाम आईडी = 3 होता है, उसी विशेषता के साथ 'ए' से शुरू होता है और इन विशेषताओं के लिए समान मूल्य।
मुझे यह करने के लिए कुछ अलग तरीके मिले, लेकिन सभी उनमें से बहुत धीमी गति से जब तालिका में बहुत सी पंक्तियां होती हैं (हजारों से अधिक सौ)
जिस तरह से मैंने सबसे अच्छा प्रदर्शन प्राप्त किया है, वह अगली क्वेरी का उपयोग कर रहा है:
select A2.Id से (चुनें a.FeatureName, a.Value Table1 से जहां a.Id = 1) a1, (चयन करें a.Id, a.FeatureName, a.Value Table1 से जहां a.FeatureName जैसे 'A%' ) A2 जहां a1.FeatureName = a2.FeatureName और a1.value = a2.value समूह द्वारा a2.Id गिनती (*) = 2 intersecta तालिका 1 से चुनें a.Id जहां a.FeatureName 'A%' समूह की तरह एक I.D होने पर गिनती (*) = 2
जहां @nFeatures आईडी = 1 में 'ए' से शुरू की जाने वाली विशेषताओं की संख्या है। मैं इस क्वेरी को कॉल करने से पहले उन्हें गिना। मैं उन परिणामों से बचने के लिए प्रतिच्छेदन करता हूं जिनके पास आईडी = 1 की तुलना में समान मापदंड हैं, लेकिन कुछ अन्य, जिनके नाम 'ए' के साथ शुरू होता है।
मुझे लगता है कि सबसे धीमा हिस्सा दूसरी उपकुंजी है:
<प्री> चुनें a.Id, a.FeaureName, a.value MyTable से जहां a.FeatureName = 'A%'
लेकिन मुझे नहीं पता कि कैसे बनाने के लिए यह तेजी से शायद मुझे अनुक्रमणिका के साथ खेलना होगा।
मैं इस उद्देश्य के लिए एक तेज प्रश्न कैसे लिख सकता हूं?
तो आप सभी पंक्तियों को चाहते हैं जहां FeatureName
और मान
का संयोजन अद्वितीय नहीं है? आप EXISTS
उपयोग कर सकते हैं:
SELECT t। * से dbo.Table1t WHERE t.FeatureName 'A%' और मौजूदा (1 से चुनें dbo.Table1 t2 WHERE t.Id & lt; & gt; टी 2.आईडी और टी। फ्चरनाम = टी 2.फ़िएचरनाम और टी। वैल्यू = टी 2. वैल्यू)
मैं इस उद्देश्य के लिए एक तेज़ क्वेरी कैसे लिख सकता / सकती हूं?
यदि यह FASTName + मान पर कोई अनुक्रमणिका नहीं बनाते हैं तो पर्याप्त नहीं है।
Comments
Post a Comment