दोनों IN
और OR
b = 0
b = 3
के लिए एक के बाद के लिए एक प्रश्न करना होगा, और फिर एक मर्ज दो परिणाम सेट पर शामिल होने के करते हैं, और अंत में किसी भी डुप्लिकेट को फ़िल्टर।
IN
के साथ, डुप्लिकेट वास्तव में, मतलब नहीं है क्योंकि b
दोनों नहीं हो सकता 0
और 3
, लेकिन तथ्य यह है कि IN
b = 0 OR b = 3
में परिवर्तित हो जाएगा है, और OR
साथ, मेकअप भावना कर डुप्लिकेट क्योंकि आपके पास b = 0 OR a = 3
हो सकता है, और यदि आप दो अलग-अलग परिणाम सेट में शामिल होना चाहते थे, तो आप दोनों मानदंडों से मेल खाने वाले प्रत्येक रिकॉर्ड के लिए डुप्लीकेट के साथ समाप्त हो सकते हैं।
तो एक डुप्लिकेट फ़िल्टरिंग हमेशा किया जाएगा, भले ही आप IN
या OR
का उपयोग कर रहे हों।
select distinct(a)
from mytable
where
b = 0
UNION ALL
select distinct(a)
from mytable
where
b = 3
: - जैसा कि सामान्यतः होता है जब आप
IN
का उपयोग कर रहे है - हालांकि, अगर आप शुरू से जानते हैं कि आप किसी भी डुप्लिकेट नहीं होगा तो आप जो बाहर डुप्लिकेट फ़िल्टर नहीं करता
UNION ALL
का उपयोग करके कुछ प्रदर्शन हासिल कर सकते हैं
स्रोत
2010-08-18 09:05:58
क्या आपने इसे स्वयं नहीं किया? –