Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में टेबल में मौजूद न होने वाले मानों को कैसे क्वेरी करें?

MySQL में किसी टेबल में मौजूद नहीं होने वाले मानों को खोजने के लिए, UNION ALL के साथ WHERE NOT EXISTS या NOT IN का उपयोग करें। यह "गैप विश्लेषण" या मिसिंग सीक्वेंस खोजने के लिए उपयोगी है।

उदाहरण: मिसिंग ऑटो-इन्क्रीमेंट मान खोजना

ऑटो-इन्क्रीमेंट टेबल बनाएं:

mysql> CREATE TABLE DemoTable1918 (
    Value INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

5 रिकॉर्ड इन्सर्ट करें (Value 1 से 5 तक):

mysql> INSERT INTO DemoTable1918 VALUES (), (), (), (), ();

मौजूदा डेटा:

+-------+
| Value |
+-------+
| 1     |
| 2     |
| 3     |
| 4     |
| 5     |
+-------+

6, 7, 8 मान जो टेबल में नहीं हैं, उन्हें खोजें:

mysql> SELECT tbl.Value
FROM (
    SELECT 6 AS Value UNION ALL
    SELECT 7 UNION ALL
    SELECT 8
) tbl
WHERE NOT EXISTS (
    SELECT 1 FROM DemoTable1918 tbl1 
    WHERE tbl1.Value = tbl.Value
);

आउटपुट:

+-------+
| Value |
+-------+
| 6     |
| 7     |
| 8     |
+-------+

वैकल्पिक दृष्टिकोण

1. NOT IN का उपयोग (सावधानी: NULL मान समस्या पैदा कर सकते हैं)

SELECT val FROM (
    SELECT 6 AS val UNION ALL SELECT 7 UNION ALL SELECT 8
) t
WHERE val NOT IN (SELECT Value FROM DemoTable1918);

2. LEFT JOIN का उपयोग (बड़े डेटासेट के लिए अक्सर तेज़)

SELECT t.val
FROM (
    SELECT 6 AS val UNION ALL SELECT 7 UNION ALL SELECT 8
) t
LEFT JOIN DemoTable1918 d ON d.Value = t.val
WHERE d.Value IS NULL;

3. सीक्वेंस जनरेट करना (MySQL 8.0+ CTE के साथ)

WITH RECURSIVE seq(n) AS (
    SELECT 6 UNION ALL SELECT n+1 FROM seq WHERE n < 8
)
SELECT n FROM seq
WHERE n NOT IN (SELECT Value FROM DemoTable1918);

कब उपयोग करें

  • मिसिंग ID/सीक्वेंस नंबर खोजने के लिए
  • डेटा इंटीग्रिटी चेक के लिए
  • रेफरेंस डेटा के विरुद्ध वैलिडेशन के लिए

NOT EXISTS आमतौर पर NOT IN से सुरक्षित है क्योंकि यह NULL मानों को सही ढंग से संभालता है।

  1. - MySQL में LIMIT OFFSET का उपयोग करके कॉलम में nth सबसे बड़ा मान कैसे खोजें

    LIMIT और OFFSET के साथ nth उच्चतम मान प्राप्त करना कॉलम में nth उच्चतम मान प्राप्त करने के लिए LIMIT ... OFFSET का उपयोग करें। OFFSET का उपयोग मानों को छोड़ने (स्किप) के लिए किया जाता है। आइए पहले एक टेबल बनाते हैं: mysql> CREATE TABLE DemoTable ( Value INT ); रिकॉर्ड्स इन्सर्ट करें: mysql>

  1. - MySQL तालिका में प्रत्येक मान के लिए अधिकतम (MAX) कैसे चुनें?

    MySQL में GROUP BY और MAX() का उपयोग करके प्रत्येक समूह (जैसे देश) के लिए अधिकतम मान (जैसे जनसंख्या) प्राप्त किया जा सकता है। उदाहरण देश जनसंख्या तालिका: mysql> CREATE TABLE DemoTable (CountryName VARCHAR(20), Population INT); mysql> INSERT INTO DemoTable VALUES (US, 560), (UK, 10090), (UK, 8

  1. - MySQL में INSERT INTO SELECT से दूसरी टेबल के मान लेकर नई टेबल भरें

    सिंटैक्स insert into targetTable(col1, col2) select sourceCol1, sourceCol2 from sourceTable where condition; उदाहरण insert into demo83(id,username) select id,name from demo82 where id=101; परिणाम +------+----------+ | id | username | +------+----------+ | 101 | Bob | | 101 | David |