रो कंस्ट्रक्टर के साथ IN ऑपरेटर
MySQL एक साथ कई कॉलम्स पर IN ऑपरेटर का उपयोग करने के लिए रो कंस्ट्रक्टर सिंटैक्स (col1, col2) IN ((val1, val2), ...) सपोर्ट करता है।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable810(
First INT,
Second INT
);
Query OK, 0 rows affected (0.73 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable810 VALUES
(20,40),(70,90),(120,150),(78,128);
Query OK, 4 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable810;
+-------+--------+ | First | Second | +-------+--------+ | 20 | 40 | | 70 | 90 | | 120 | 150 | | 78 | 128 | +-------+--------+ 4 rows in set (0.00 sec)
दो कॉलम्स पर IN क्वेरी
mysql> SELECT * FROM DemoTable810 WHERE (First,Second) IN ((120,150),(20,40));
परिणाम
+-------+--------+ | First | Second | +-------+--------+ | 20 | 40 | | 120 | 150 | +-------+--------+ 2 rows in set (0.00 sec)
काम कैसे करता है
(First, Second)एक रो कंस्ट्रक्टर बनाता है - दो कॉलम्स का एक टपलIN ((120,150), (20,40))टपल्स की सूची से तुलना करता है- मिलान सटीक होना चाहिए: दोनों कॉलम्स के मान जोड़ी से मेल खाने चाहिए
तुलना: IN vs OR
IN सिंटैक्स (संक्षिप्त)
WHERE (First, Second) IN ((120,150), (20,40))
समतुल्य OR सिंटैक्स (वर्बोज)
WHERE (First = 120 AND Second = 150) OR (First = 20 AND Second = 40)
उपयोग के मामले
- कंपोजिट प्राइमरी/यूनिक की पर लुकअप
- एकाधिक सटीक रो मिलान
- सबक्वेरी से मान जोड़े प्राप्त करना:
WHERE (First, Second) IN (SELECT Col1, Col2 FROM OtherTable WHERE ...)
सबक्वेरी उदाहरण
SELECT * FROM Orders
WHERE (CustomerId, OrderDate) IN (
SELECT CustomerId, MAX(OrderDate)
FROM Orders
GROUP BY CustomerId
);
नोट
- MySQL-विशिष्ट सिंटैक्स (मानक SQL में भी सपोर्टेड)
- सभी तुलना ऑपरेटर्स (
=,<>,<, आदि) रो कंस्ट्रक्टर्स के साथ काम करते हैं - NULL मानों वाले टपल्स की तुलना सावधानी से करें (NULL तुलना नियम लागू होते हैं)