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

การยกเว้น ID เฉพาะและแสดงข้อมูลที่เหลือใน MySQL ด้วย NOT IN

เพื่อยกเว้นข้อมูลบาง ID และแสดงข้อมูลที่เหลือ ใช้ NOT IN()

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    Id int ); 
Query OK, 0 rows affected (0.64 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values(1); Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(2); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(3); Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(4); Query OK, 1 row affected (0.41 sec)
mysql> insert into DemoTable values(5); Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(6); Query OK, 1 row affected (0.12 sec)

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

mysql> select *from DemoTable;
+------+
| Id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.00 sec)

คิวรี่ยกเว้น ID 1, 4, 6, 3

mysql> select *from DemoTable where Id NOT IN(1,4,6,3);

ผลลัพธ์ (เหลือ ID 2 และ 5):

+------+
| Id   |
+------+
| 2    |
| 5    |
+------+
2 rows in set (0.00 sec)

ข้อดีของ NOT IN()

  • สั้นกว่าและอ่านง่ายกว่า WHERE Id != 1 AND Id != 4 AND Id != 6 AND Id != 3
  • รองรับ Subquery: WHERE Id NOT IN (SELECT id FROM excluded_table)

ข้อควรระวังสำคัญ: NULL ใน NOT IN

-- หาก Subquery คืนค่า NULL
WHERE id NOT IN (1, 2, NULL)  -- จะไม่คืนแถวใดๆ เลย (UNKNOWN)

-- แก้ไขด้วย NOT EXISTS
WHERE NOT EXISTS (SELECT 1 FROM excluded WHERE excluded.id = DemoTable.id)

กรณีใช้ LEFT JOIN แทน (ประสิทธิภาพดีกว่าบางครั้ง)

SELECT d.* FROM DemoTable d 
LEFT JOIN (SELECT 1 as id UNION SELECT 4 UNION SELECT 6 UNION SELECT 3) e ON d.Id = e.id 
WHERE e.id IS NULL;