अपडेट किया गया: हमें बेहतर प्रदर्शन के लिए जॉइन का उपयोग करना पसंद करना चाहिए जब हमारे लिए यह करना आसान हो। शामिल हों बनाम उप-क्वेरी
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
नोट:मैंने t3 के लिए कॉलम नाम ग्राहक बदल दिया है क्योंकि दो सम्मिलित तालिकाओं में अलग-अलग कॉलम नाम होने चाहिए
स्पष्टीकरण:
जब आपके पास बड़ा डेटा होता है तो आंतरिक या उप क्वेरी का उपयोग करना महंगा होता है। इसके बजाय जॉइन का उपयोग करें, आइए सबक्वेरी को जॉइन करने के लिए कनवर्ट करना सीखें
सबक्वायरी . के साथ हमारे पास था:
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
उप-क्वेरी को शामिल होने के लिए कनवर्ट करना
पहला कदम:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA')
) t2
on o.customer != t2.changedname;
दूसरा चरण:
Select distinct Customer from orders o
join
(
SELECT distinct Customer as changedname FROM Orders o2 where invoice
join
(
Select distinct invoice from Promotions where Coupon='couponA'
) t3
on o2.invoice = t3.invoice
) t2
on o.customer != t2.changedname;
और बस इतना ही, अनेक पंक्तियों वाली तालिकाओं के लिए बहुत तेज़
मूल उत्तर:
उपयोग not in
. एक नज़र डालें।
Select distinct Customer from orders where customer not in
(SELECT distinct Customer FROM Orders where invoice in
(Select distinct invoice from Promotions where Coupon='couponA'));
संपादित करें मैंने क्वेरी को तेज़ बनाने के लिए अलग जोड़ा है