संपादित करें
वास्तव में सुनिश्चित नहीं है कि आपको क्या चाहिए
- क्या आप कुछ अपेक्षित परिणाम दिखा सकते हैं
- क्या आप हमें बता सकते हैं कि "प्रदर्शन के मामले में इसे मारता है" से आपका क्या मतलब है (क्या यह निष्पादन समय के 20 सेकंड तक जाता है?)
मुझे विश्वास नहीं है कि यह अधिक कुशल है लेकिन इसे आजमाएं।
select
*
from
tableA as a
left join tableB as b1
on a.id=b1.id1
and b1.col2='Red'
left join tableB as b2
on a.id=b2.id2
and b2.col2='Blue'
where
(b1.id1 is not null or b2.id2 is not null)
or (b1.id1 is null and b2.id2 is null)
आपको परिणाम को SELECT
. में मैनेज करना होगा CASE WHEN
. के साथ ...
आप प्रदर्शन की तुलना कर सकते हैं और अनुक्रमित कॉलम पर अनुक्रमणिका डाल सकते हैं (आपके पास पूर्ण तालिका और क्वेरी में क्या है पर निर्भर करता है लेकिन यहां यह id, id1 and col2
होना चाहिए। )