मान लें कि हमारे पास 'कारपार्ट' में शामिल होने वाली तालिका के साथ दो टेबल हैं: 'कार' और 'पार्ट'। मान लीजिए कि मैं उन सभी कारों को देखना चाहता हूं जिनके पास 123 भाग हैं। मैं यह कर सकता है:जो तेज़ है: ग्रुप बाय या सबक्वायरी के साथ जुड़ें?
SELECT Car.Col1, Car.Col2, Car.Col3
FROM Car
INNER JOIN Car_Part ON Car_Part.Car_Id = Car.Car_Id
WHERE Car_Part.Part_Id = @part_to_look_for
GROUP BY Car.Col1, Car.Col2, Car.Col3
या मैं अब इस
SELECT Car.Col1, Car.Col2, Car.Col3
FROM Car
WHERE Car.Car_Id IN (SELECT Car_Id FROM Car_Part WHERE Part_Id = @part_to_look_for)
कर सकता है, मुझ में सब कुछ है, क्योंकि मैं अच्छा माता पिता जो मुझे एक में पैदा द्वारा लाया गया है पहली विधि का उपयोग करना चाहता है उप-प्रश्नों की puritanical नफरत और सेट सिद्धांत के प्यार, लेकिन मुझे यह सुझाव दिया गया है कि उस बड़े ग्रुप BY को उप-क्वेरी से भी बदतर है।
मुझे यह इंगित करना चाहिए कि हम SQL Server 2008 पर हैं। मुझे यह भी कहना चाहिए कि वास्तव में मैं भाग आईडी, भाग प्रकार और संभवतः अन्य चीजों के आधार पर भी चयन करना चाहता हूं। तो, क्वेरी मैं वास्तव में क्या करना चाहते हैं इस तरह दिखता है:
SELECT Car.Col1, Car.Col2, Car.Col3
FROM Car
INNER JOIN Car_Part ON Car_Part.Car_Id = Car.Car_Id
INNER JOIN Part ON Part.Part_Id = Car_Part.Part_Id
WHERE (@part_Id IS NULL OR Car_Part.Part_Id = @part_Id)
AND (@part_type IS NULL OR Part.Part_Type = @part_type)
GROUP BY Car.Col1, Car.Col2, Car.Col3
या ...
SELECT Car.Col1, Car.Col2, Car.Col3
FROM Car
WHERE (@part_Id IS NULL OR Car.Car_Id IN (
SELECT Car_Id
FROM Car_Part
WHERE Part_Id = @part_Id))
AND (@part_type IS NULL OR Car.Car_Id IN (
SELECT Car_Id
FROM Car_Part
INNER JOIN Part ON Part.Part_Id = Car_Part.Part_Id
WHERE Part.Part_Type = @part_type))
तुम दोनों को चलाने की है? क्वेरी योजनाओं को देखा? इसे बेंचमार्क किया? – Oded
मुझे डेटा का एक भार उत्पन्न करना होगा, इसलिए मैं अगले सप्ताह तक इसके लिए गोल नहीं करूंगा। और जब मैंने एक जवाब के लिए गुगल किया तो मुझे कोई नहीं मिला, इसलिए किसी और के लिए ऑनलाइन प्रश्न पोस्ट करना उचित है जो शायद देख रहा हो। – d4nt
समूह श्रम गहन है, औसत, रकम इत्यादि जैसी चीजों की गणना करने के लिए प्रयुक्त होता है। आप डुप्लिकेट को खत्म करने के लिए इसका उपयोग कर रहे हैं। समूह के बिना DISTINCT का प्रयास करें ... – Alocyte