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

MySQL:उप चयन के साथ अपेक्षित रूप से काम नहीं कर रहा है?

मैं यह अनुमान लगाऊंगा कि sales_flat_order . में कम से कम एक रिकॉर्ड है जो शर्त को संतुष्ट करता हो status != 'holded' और जिसका customer_email NULL है ।

(NOT) IN NULL . के साथ बेहद मुश्किल है s, यहाँ एक उदाहरण है।

निम्नलिखित प्रश्न पर विचार करें:

SELECT 1 WHERE 1 NOT IN (SELECT 2 UNION ALL SELECT 3)

यह मान 1 . के साथ एक रिकॉर्ड देता है , जैसा कि अपेक्षित था।

हालांकि अगर आप इसे इसमें बदलते हैं:

SELECT 1 WHERE 1 NOT IN (SELECT 2 UNION ALL SELECT NULL)

फिर क्वेरी एक खाली परिणाम सेट उत्पन्न करती है। यह (NOT) IN . के साथ एक प्रसिद्ध समस्या है . इस कारण से, आपको आमतौर पर इस सिंटैक्स से बचना चाहिए, और (NOT) EXISTS . का उपयोग करना चाहिए बजाय। उपरोक्त क्वेरी को इस प्रकार फिर से लिखा जा सकता है:

SELECT 1 a
FROM (SELECT 1 a) t1
WHERE NOT EXISTS (
    SELECT 1
    FROM (SELECT 2 a UNION ALL SELECT NULL) t2
    WHERE t1.a = t2.a
)

डीबी फिडल पर डेमो

आपकी क्वेरी के लिए:

SELECT customer_email 
FROM sales_flat_order s
WHERE NOT EXISTS (
    SELECT 1
    FROM sales_flat_order s1
    WHERE s1.customer_email = s.customer_email AND s.status != 'holded'
);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MYSQL - 127.0.0.1 और लोकलहोस्ट के बीच अंतर

  2. एक कॉलम में न्यूनतम का पता लगाना जहां दो अन्य कॉलम शून्य हैं

  3. Yii2 - कई शर्तों पर बाएं शामिल हों

  4. MySQL अद्वितीय/विशिष्ट परिणाम कैसे लौटाएं?

  5. बाएँ बाहरी जॉइन के साथ MySQL क्वेरी को अनुकूलित करने का प्रयास कर रहा है