ใช้ NOT IN ร่วมกับ Subquery เพื่อตัดแถวที่ตรงเงื่อนไขออก
ตัวอย่างการใช้งาน
1. สร้างตารางและข้อมูล
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(100),
-> Age int
-> );
mysql> insert into DemoTable(Name,Age) values('John',21), ('Carol',22), ('David',23);
2. ข้อมูลทั้งหมด
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 21 | | 2 | Carol | 22 | | 3 | David | 23 | +----+-------+------+
3. Subquery ตัด Carol ออก
mysql> select * from DemoTable
-> where Name not in (select Name from DemoTable where Name='Carol');
ผลลัพธ์
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | John | 21 | | 3 | David | 23 | +----+-------+------+
วิธีอื่นที่แนะนำ (ประสิทธิภาพดีกว่า)
ใช้ NOT EXISTS
SELECT * FROM DemoTable d1
WHERE NOT EXISTS (
SELECT 1 FROM DemoTable d2
WHERE d2.Name = 'Carol' AND d2.Id = d1.Id
);
ใช้ LEFT JOIN ... IS NULL
SELECT d1.* FROM DemoTable d1 LEFT JOIN DemoTable d2 ON d1.Id = d2.Id AND d2.Name = 'Carol' WHERE d2.Id IS NULL;
ข้อดีของ NOT EXISTS/LEFT JOIN: จัดการ NULL ได้ถูกต้อง และใช้ Index ได้ดีกว่า NOT IN