MySQL में कई शर्तों में से कुछ (जैसे 4 में से 3) मैच करने वाले रिकॉर्ड पाने के लिए CASE स्टेटमेंट का उपयोग करके प्रत्येक शर्त के लिए 1 या 0 जोड़ सकते हैं।
सिंटैक्स
SELECT * FROM yourTableName
WHERE (CASE WHEN condition1 THEN 1 ELSE 0 END) +
(CASE WHEN condition2 THEN 1 ELSE 0 END) +
(CASE WHEN condition3 THEN 1 ELSE 0 END) +
(CASE WHEN condition4 THEN 1 ELSE 0 END) >= 3;
उदाहरण के साथ समझें
टेबल बनाएं:
CREATE TABLE UserInformation (
Id INT NOT NULL AUTO_INCREMENT,
FirstName VARCHAR(20),
LastName VARCHAR(20),
Age INT,
Marks INT,
PRIMARY KEY(Id)
);
रिकॉर्ड डालें:
INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('John', 'Smith', 22, 89);
INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('Carol', 'Taylor', 21, 80);
INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('John', 'Doe', 24, 81);
INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('David', 'Miller', 29, 99);
INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('Mitchell', 'Johnson', 22, 65);
सभी रिकॉर्ड देखें:
SELECT * FROM UserInformation;
आउटपुट:
+----+-----------+----------+------+-------+
| Id | FirstName | LastName | Age | Marks |
+----+-----------+----------+------+-------+
| 1 | John | Smith | 22 | 89 |
| 2 | Carol | Taylor | 21 | 80 |
| 3 | John | Doe | 24 | 81 |
| 4 | David | Miller | 29 | 99 |
| 5 | Mitchell | Johnson | 22 | 65 |
+----+-----------+----------+------+-------+
4 में से 3 शर्तें मैच करने वाला क्वेरी
शर्तें: FirstName='Mitchell', LastName='Johnson', Age=22, Marks=67
SELECT * FROM UserInformation
WHERE (CASE WHEN FirstName = 'Mitchell' THEN 1 ELSE 0 END) +
(CASE WHEN LastName = 'Johnson' THEN 1 ELSE 0 END) +
(CASE WHEN Age = 22 THEN 1 ELSE 0 END) +
(CASE WHEN Marks = 67 THEN 1 ELSE 0 END) >= 3;
परिणाम:
+----+-----------+----------+------+-------+
| Id | FirstName | LastName | Age | Marks |
+----+-----------+----------+------+-------+
| 5 | Mitchell | Johnson | 22 | 65 |
+----+-----------+----------+------+-------+
व्याख्या
- रिकॉर्ड 5: Mitchell (1) + Johnson (1) + Age 22 (1) + Marks 67 (0) = 3 ✓
- अन्य रिकॉर्ड: अधिकतम 2 शर्तें मैच करती हैं
- यह तकनीक "फज़ी मैचिंग" या "पार्शियल मैचिंग" के लिए उपयोगी है
बेहतर पठनीयता के लिए
SELECT *,
(FirstName = 'Mitchell') +
(LastName = 'Johnson') +
(Age = 22) +
(Marks = 67) AS match_count
FROM UserInformation
HAVING match_count >= 3;
MySQL में बूलियन अभिव्यक्ति 1 (TRUE) या 0 (FALSE) लौटाती है, इसलिए CASE की आवश्यकता नहीं।