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

ใช้ Subquery กรองแถวที่ไม่ต้องการใน MySQL

ใช้ 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