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

MySQL SELECT จากตาราง A ที่ไม่มีในตาราง B ด้วย JOIN

หาข้อมูลในตาราง 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