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

MySQL टेबल में न्यूनतम अनुपयोगी (मिसिंग) मान कैसे खोजें?

सीक्वेंस में गैप (छूटा हुआ न्यूनतम मान) खोजने की क्वेरी

एक ऑटो-इन्क्रीमेंट या मैनुअल सीक्वेंस कॉलम में सबसे छोटा अनुपयोगी (मिसिंग) मान खोजने के लिए LEFT JOIN सेल्फ-जॉइन तकनीक का उपयोग करें।

टेबल और डेटा

CREATE TABLE FindValue (SequenceNumber INT);
INSERT INTO FindValue VALUES (109), (110), (111), (113), (114);

क्वेरी: न्यूनतम मिसिंग मान

SELECT tbl1.SequenceNumber + 1 AS ValueNotUsedInSequenceNumber
FROM FindValue AS tbl1
LEFT JOIN FindValue AS tbl2 ON tbl1.SequenceNumber + 1 = tbl2.SequenceNumber
WHERE tbl2.SequenceNumber IS NULL
ORDER BY tbl1.SequenceNumber
LIMIT 1;

आउटपुट

+------------------------------+
| ValueNotUsedInSequenceNumber |
+------------------------------+
| 112                          |
+------------------------------+

कैसे काम करता है

  • tbl1 प्रत्येक पंक्ति को लेता है और अगला मान (+1) जांचता है।
  • LEFT JOIN tbl2 पर उसी अगले मान से मिलान करता है।
  • WHERE tbl2.SequenceNumber IS NULL का अर्थ है वह अगला मान टेबल में मौजूद नहीं है।
  • ORDER BY ... LIMIT 1 सबसे छोटा ऐसा मान देता है।

वैकल्पिक: MySQL 8.0+ में विंडो फ़ंक्शन

SELECT MIN(SequenceNumber) + 1 AS MissingValue
FROM (
    SELECT SequenceNumber,
           LAG(SequenceNumber) OVER (ORDER BY SequenceNumber) AS prev_val
    FROM FindValue
) t
WHERE SequenceNumber - prev_val > 1
UNION ALL
SELECT MIN(SequenceNumber) - 1 FROM FindValue WHERE MIN(SequenceNumber) > 1
LIMIT 1;

पहली विधि सभी संस्करणों में काम करती है और समझने में आसान है।

  1. - MySQL में फ्लोट मान को दो कॉलम में कैसे विभाजित करें?

    MySQL में दशमलव संख्या (फ्लोट/स्ट्रिंग) को दशमलव बिंदु से पहले और बाद के भाग में विभाजित करने के लिए, SUBSTRING_INDEX() के साथ CAST() का उपयोग करें। यह वित्तीय डेटा, माप, और निर्देशांक प्रोसेसिंग के लिए उपयोगी है। उदाहरण: 100.50 → 100 और 50 डेमो टेबल बनाएं: mysql> CREATE TABLE DemoTable1951 (V

  1. - MySQL में VARCHAR कॉलम से अधिकतम मान कैसे प्राप्त करें

    समस्या VARCHAR कॉलम पर MAX() सीधे काम नहीं करता क्योंकि स्ट्रिंग तुलना वर्णानुक्रम में होती है। समाधान CAST() का उपयोग करके VARCHAR को UNSIGNED INTEGER में बदलें फिर MAX() लागू करें। उदाहरण INSERT INTO DemoTable2030 VALUES (8), (1), (10001), (901); क्वेरी SELECT MAX(CAST(Value AS UNSIGNED)) FRO

  1. - MySQL में किसी कॉलम में अधिकतम मान खोजना

    किसी कॉलम में अधिकतम मान खोजने के लिए MAX(columnName) का उपयोग करना होगा। लेकिन, पहले, हम MySQL में डेटाबेस और टेबल के बारे में समझेंगे। MySQL इंस्टॉल करने से पहले, यह निर्धारित करना महत्वपूर्ण है कि किस संस्करण और किस डिस्ट्रीब्यूशन फॉर्मेट (यह बाइनरी फाइल या सोर्स फाइलों से हो सकता है) का उपयोग