MySQL में दो कॉलम के मान **समान नहीं** होने वाली पंक्तियाँ चुनने के लिए != (या <>) ऑपरेटर का उपयोग करें, साथ में NULL हैंडलिंग भी करें क्योंकि NULL != NULL FALSE होता है।
सिंटैक्स
SELECT * FROM yourTableName
WHERE column1 != column2
OR (column1 IS NULL AND column2 IS NOT NULL)
OR (column2 IS NULL AND column1 IS NOT NULL);
क्यों अतिरिक्त शर्तें?
- SQL में
NULL != NULL→ FALSE (नहीं TRUE) NULL != 5→ NULL (नहीं TRUE)5 != NULL→ NULL (नहीं TRUE)- WHERE केवल TRUE को चुनता है, NULL/FALSE को नहीं
उदाहरण के साथ समझें
टेबल बनाएं:
CREATE TABLE selectTwoColumns (
Id INT NOT NULL AUTO_INCREMENT,
FirstNumber INT,
SecondNumber INT,
PRIMARY KEY(Id)
);
विभिन्न संयोजन डालें:
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(10, 20); -- भिन्न
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(30, 40); -- भिन्न
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(20, 20); -- समान
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(50, 60); -- भिन्न
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(50, 50); -- समान
INSERT INTO selectTwoColumns(FirstNumber, SecondNumber) VALUES(70, NULL); -- एक NULL
सभी रिकॉर्ड देखें:
SELECT * FROM selectTwoColumns;
आउटपुट:
+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1 | 10 | 20 |
| 2 | 30 | 40 |
| 3 | 20 | 20 |
| 4 | 50 | 60 |
| 5 | 50 | 50 |
| 6 | 70 | NULL |
+----+-------------+--------------+
भिन्न मान वाली पंक्तियाँ चुनें
SELECT * FROM selectTwoColumns
WHERE FirstNumber != SecondNumber
OR (FirstNumber IS NULL AND SecondNumber IS NOT NULL)
OR (SecondNumber IS NULL AND FirstNumber IS NOT NULL);
परिणाम:
+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1 | 10 | 20 |
| 2 | 30 | 40 |
| 4 | 50 | 60 |
| 6 | 70 | NULL |
+----+-------------+--------------+
सरल विकल्प: NOT (<=>) ऑपरेटर
MySQL का <=> (NULL-सेफ इक्वल) ऑपरेटर:
SELECT * FROM selectTwoColumns
WHERE NOT (FirstNumber <=> SecondNumber);
<=> तुलना:
| A | B | A <=> B | NOT (A <=> B) |
|---|---|---|---|
| 10 | 20 | FALSE | TRUE ✓ |
| 20 | 20 | TRUE | FALSE |
| NULL | NULL | TRUE | FALSE |
| 70 | NULL | FALSE | TRUE ✓ |
COALESCE के साथ (यदि डिफॉल्ट मान सेट करना हो)
SELECT * FROM selectTwoColumns
WHERE COALESCE(FirstNumber, -1) != COALESCE(SecondNumber, -1);
यहां -1 ऐसा मान है जो डेटा में नहीं आता।
नोट
!=और<>समान हैं<=>MySQL-विशिष्ट है, पोर्टेबल नहीं- सबसे पोर्टेबल: स्पष्ट NULL जांच के साथ
!=