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

MySQL में दो SELECT के बीच अंतर कैसे खोजें?


सबक्वेरी के साथ NOT IN का उपयोग करें

एक SELECT के परिणाम से दूसरी SELECT के परिणाम को बाहर करने के लिए NOT IN के साथ सबक्वेरी का उपयोग करें।

सिंटैक्स

SELECT * FROM yourTableName 
WHERE yourColumnName NOT IN (
    SELECT yourColumnName FROM yourTableName WHERE yourCondition
);

व्यावहारिक उदाहरण

टेबल बनाना

mysql> CREATE TABLE DifferenceSelectDemo (
    Id INT NOT NULL AUTO_INCREMENT,
    UserId INT,
    UserValue INT,
    PRIMARY KEY(Id)
);

डेटा डालना

mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(10, 10);
mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(10, 20);
mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(20, 30);
mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(20, 20);
mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(30, 40);
mysql> INSERT INTO DifferenceSelectDemo(UserId, UserValue) VALUES(30, 20);

सभी रिकॉर्ड

+----+--------+-----------+
| Id | UserId | UserValue |
+----+--------+-----------+
|  1 |     10 |        10 |
|  2 |     10 |        20 |
|  3 |     20 |        30 |
|  4 |     20 |        20 |
|  5 |     30 |        40 |
|  6 |     30 |        20 |
+----+--------+-----------+

क्वेरी: Id=1 वाले UserValue (10) को छोड़कर सभी पंक्तियाँ

mysql> SELECT * FROM DifferenceSelectDemo 
WHERE UserValue NOT IN (
    SELECT UserValue FROM DifferenceSelectDemo WHERE Id = 1
);

आउटपुट

+----+--------+-----------+
| Id | UserId | UserValue |
+----+--------+-----------+
|  2 |     10 |        20 |
|  3 |     20 |        30 |
|  4 |     20 |        20 |
|  5 |     30 |        40 |
|  6 |     30 |        20 |
+----+--------+-----------+

व्याख्या

  • सबक्वेरी SELECT UserValue ... WHERE Id = 1 मान 10 लौटाती है।
  • बाहरी क्वेरी उन पंक्तियों को बाहर करती है जहां UserValue = 10 है।
  • पंक्ति 1 (UserValue=10) परिणाम में नहीं है।

विकल्प: LEFT JOIN / NOT EXISTS

बड़े डेटासेट या NULL मानों को संभालने के लिए NOT EXISTS या LEFT JOIN ... WHERE IS NULL अक्सर बेहतर प्रदर्शन देते हैं:

-- NOT EXISTS (NULL-सुरक्षित)
SELECT * FROM DifferenceSelectDemo d1
WHERE NOT EXISTS (
    SELECT 1 FROM DifferenceSelectDemo d2 
    WHERE d2.Id = 1 AND d2.UserValue = d1.UserValue
);

-- LEFT JOIN
SELECT d1.* FROM DifferenceSelectDemo d1
LEFT JOIN (
    SELECT UserValue FROM DifferenceSelectDemo WHERE Id = 1
) d2 ON d1.UserValue = d2.UserValue
WHERE d2.UserValue IS NULL;

मुख्य बिंदु

  • NOT IN सरल है लेकिन NULL मान होने पर अप्रत्याशित परिणाम दे सकता है।
  • NOT EXISTS आमतौर पर सुरक्षित और तेज़ है।
  • सबक्वेरी केवल एक कॉलम लौटाना चाहिए।
  1. - MySQL में intvalue='1' और intvalue=1 में अंतर

    उत्तर intvalue = 1 उपयोग करें। स्टेटमेंट intvalue = 1 आंतरिक रूप से MySQL द्वारा CAST(1 AS INT) में कन्वर्ट हो जाता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected (0.64 sec) INSERT INTO DemoTable1566 VALUES(90); Query OK, 1 row affected (0.19 sec) सभी रिकॉर्ड देखना SELECT *

  1. - MySQL में TIMESTAMPDIFF का उपयोग करके दो DATETIME मानों के बीच अंतर ज्ञात करें

    MySQL में दो DATETIME मानों के बीच अंतर की गणना MySQL में TIMESTAMPDIFF() फ़ंक्शन दो डेटाइम मानों के बीच निर्दिष्ट इकाई (सेकंड, मिनट, घंटे, दिन, आदि) में अंतर लौटाता है। DATEDIFF() के विपरीत जो केवल दिन लौटाता है, TIMESTAMPDIFF लचीला है। टेबल बनाना ); Query OK, 0 rows affected (0.86 sec) डेटा डाल

  1. - C# में दो DateTime के बीच मिलीसेकंड में अंतर

    मान लीजिए निम्न हमारी तारीखों के लिए दो DateTime ऑब्जेक्ट हैं: DateTime date1 = new DateTime(2018, 8, 11, 08, 15, 20); DateTime date2 = new DateTime(2018, 8, 11, 11, 14, 25); TimeSpan का उपयोग करके दोनों तारीखों के बीच अंतर ढूंढें: TimeSpan ts = date2 - date1; अब मिलीसेकंड प्राप्त करने के लिए निम्न