เพื่อยกเว้นข้อมูลบาง 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;