जटिल NULL-आधारित शर्तों के साथ फ़िल्टरिंग
जब कई कॉलम में NULL मान हों और आपको जटिल शर्तें लागू करनी हों (जैसे: मान NULL हो या किसी मान के बराबर न हो), तो प्रत्येक कॉलम के लिए IS NULL OR != value पैटर्न का उपयोग करें।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
value1 INT,
value2 INT,
value3 INT
);
Query OK, 0 rows affected (0.70 sec)
mysql> INSERT INTO DemoTable VALUES(20,40,NULL); Query OK, 1 row affected (0.23 sec) mysql> INSERT INTO DemoTable VALUES(40,40,NULL); Query OK, 1 row affected (0.26 sec) mysql> INSERT INTO DemoTable VALUES(NULL,NULL,NULL); Query OK, 1 row affected (0.17 sec)
सभी रिकॉर्ड
mysql> SELECT * FROM DemoTable;
+--------+--------+--------+ | value1 | value2 | value3 | +--------+--------+--------+ | 20 | 40 | NULL | | 40 | 40 | NULL | | NULL | NULL | NULL | +--------+--------+--------+ 3 rows in set (0.00 sec)
शर्त: कोई भी कॉलम 20 न हो (NULL को 20 न मानें)
mysql> SELECT * FROM DemoTable
WHERE (value1 IS NULL OR value1 != 20)
AND (value2 IS NULL OR value2 != 20)
AND (value3 IS NULL OR value3 != 20);
परिणाम:
+--------+--------+--------+ | value1 | value2 | value3 | +--------+--------+--------+ | 40 | 40 | NULL | | NULL | NULL | NULL | +--------+--------+--------+ 2 rows in set (0.00 sec)
तर्क: पंक्ति 1: value1=20 → शर्त असफल → बाहर। पंक्ति 2: value1=40 (≠20), value2=40 (≠20), value3=NULL → सभी सत्य → शामिल। पंक्ति 3: सभी NULL → सभी सत्य → शामिल।
पैटर्न: (col IS NULL OR col != val) का अर्थ "col या तो NULL है या val नहीं है"।