MySQL-এ `<>` (নট ইকুয়াল) অপারেটর NULL মানের সাথে কাজ করে না। NULL যেকোনো মানের সাথে তুলনায় `UNKNOWN` রিটার্ন করে। NULL হ্যান্ডল করতে `IS NOT NULL` বা `IS NULL` ব্যবহার করুন।
সমস্যা ও সমাধান
-- সমস্যা: NULL রো গুলো ফিল্টার হয় না SELECT * FROM yourTable WHERE col <> 2; -- NULL রো গুলো আসবে না -- সমাধান ১: NULL বাদ দিতে (IS NOT NULL) SELECT * FROM yourTable WHERE col IS NOT NULL OR col <> 2; -- সমাধান ২: NULL ও রাখতে (IS NULL) SELECT * FROM yourTable WHERE col IS NULL OR col <> 2;
উদাহরণ
mysql> CREATE TABLE IsNullDemo (ProductId INT, ProductName VARCHAR(100), ProductBackOrder INT);
mysql> INSERT INTO IsNullDemo VALUES
-> (100,'First-Product',NULL), (101,'Second-Product',2), (102,'Third-Product',NULL),
-> (103,'Fourth-Product',4), (104,'Fifth-Product',10), (105,'Sixth-Product',NULL);
-- Case 1: NULL বাদ (IS NOT NULL)
mysql> SELECT * FROM IsNullDemo WHERE ProductBackOrder IS NOT NULL OR ProductBackOrder <> 2;
+-----------+----------------+------------------+
| ProductId | ProductName | ProductBackOrder |
+-----------+----------------+------------------+
| 101 | Second-Product | 2 |
| 103 | Fourth-Product | 4 |
| 104 | Fifth-Product | 10 |
+-----------+----------------+------------------+
-- Case 2: NULL ও রাখতে (IS NULL)
mysql> SELECT * FROM IsNullDemo WHERE ProductBackOrder IS NULL OR ProductBackOrder <> 2;
+-----------+----------------+------------------+
| ProductId | ProductName | ProductBackOrder |
+-----------+----------------+------------------+
| 100 | First-Product | NULL |
| 102 | Third-Product | NULL |
| 103 | Fourth-Product | 4 |
| 104 | Fifth-Product | 10 |
| 105 | Sixth-Product | NULL |
+-----------+----------------+------------------+
মনে রাখবেন: `NULL <> 2` হলো `UNKNOWN`, `TRUE` নয়। তাই WHERE ক্লজে NULL রো গুলো ফিল্টার হয়ে যায়।