หาข้อมูลในตาราง A ที่ไม่มีในตาราง B (Left Join + IS NULL)
เทคนิค Classic: Left Join แล้ว Filter ด้วย WHERE right_table.column IS NULL
ไวยากรณ์
SELECT A.* FROM table_A A LEFT JOIN table_B B ON A.column = B.column WHERE B.column IS NULL;
ตัวอย่าง
CREATE TABLE table_A (Value INT); INSERT INTO table_A VALUES (10), (15), (35), (45); CREATE TABLE table_B (Value INT); INSERT INTO table_B VALUES (10), (20), (35), (60);
คำสั่ง LEFT JOIN
SELECT table_A.* FROM table_A LEFT JOIN table_B ON table_A.Value = table_B.Value WHERE table_B.Value IS NULL;
ผลลัพธ์
+-------+ | Value | +-------+ | 15 | | 45 | +-------+
ค่า 10 และ 35 อยู่ในทั้งสองตาราง → ถูก Filter ออก
วิธีอื่น: NOT EXISTS
SELECT * FROM table_A A WHERE NOT EXISTS (SELECT 1 FROM table_B B WHERE B.Value = A.Value);
วิธีอื่น: NOT IN (ระวัง NULL)
SELECT * FROM table_A WHERE Value NOT IN (SELECT Value FROM table_B);
⚠️ NOT IN ให้ผลผิดถ้า Subquery คืน NULL
เปรียบเทียบประสิทธิภาพ
- LEFT JOIN + IS NULL - ดีที่สุด สามารถใช้ Index ได้
- NOT EXISTS - ดี สามารถใช้ Index ได้
- NOT IN - ช้ากว่า และมีปัญหา NULL