Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ดึงข้อมูลจากตารางที่มี NULL และค่าอื่น ตามเงื่อนไขหลายอย่างใน MySQL

การกรองข้อมูลที่มี NULL และค่าปกติด้วยเงื่อนไข AND/OR

เมื่อคอลัมน์มีค่า NULL ปนอยู่กับค่าปกติ การเปรียบเทียบ != จะไม่จับค่า NULL ได้ (เพราะ NULL != 20 เป็น UNKNOWN) จึงต้องเพิ่มเงื่อนไข IS NULL เข้าไปด้วย

สร้างตารางและเพิ่มข้อมูล

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);
mysql> INSERT INTO DemoTable VALUES(40, 40, NULL);
mysql> INSERT INTO DemoTable VALUES(NULL, NULL, NULL);

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์:

+--------+--------+--------+
| value1 | value2 | value3 |
+--------+--------+--------+
| 20     | 40     | NULL   |
| 40     | 40     | NULL   |
| NULL   | NULL   | NULL   |
+--------+--------+--------+
3 rows in set (0.00 sec)

คำสั่งกรอง: ทุกคอลัมน์ต้อง (เป็น NULL OR ไม่เท่ากับ 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)

คำอธิบาย

  • แถวแรก: value1=20 → value1 != 20 เท็จ, value1 IS NULL เท็จ → ทั้งเงื่อนไข value1 เท็จ → แถวถูกตัด
  • แถวสอง: value1=40 (!=20 จริง), value2=40 (!=20 จริง), value3=NULL (IS NULL จริง) → ผ่านทั้ง 3 → เลือก
  • แถวสาม: ทุกคอลัมน์ NULL → IS NULL จริงทุกอัน → ผ่าน → เลือก
  • หลักการ: (col IS NULL OR col != val) เทียบเท่า NOT (col = val) แต่รองรับ NULL