Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

जहां मान नहीं है (सबक्वेरी)

अपडेट किया गया: हमें बेहतर प्रदर्शन के लिए जॉइन का उपयोग करना पसंद करना चाहिए जब हमारे लिए यह करना आसान हो। शामिल हों बनाम उप-क्वेरी

एसक्यूएल फिडल

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'));

संपादित करें मैंने क्वेरी को तेज़ बनाने के लिए अलग जोड़ा है

एसक्यूएल फिडल



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मुझे समझ नहीं आ रहा है कि मैं अपना पिछला इनलॉग समय कैसे अपडेट करूं

  2. ढेर सारे टेक्स्ट डेटा में रुझान ढूँढना

  3. एक ही आईडी और समूहीकृत के आधार पर दो तालिकाओं में से चुनें

  4. MySQL में utf-8 कॉलम में किसी भाषा की पहचान कैसे करें

  5. MySQL:CREATE TABLE स्टेटमेंट में प्राथमिक कुंजी का नाम दें