การใช้ LEFT JOIN เพื่อหาข้อมูลที่อยู่ใน A แต่ไม่อยู่ใน B
Pattern คלאสสิก: LEFT JOIN ... WHERE right_table.key IS NULL
สถานการณ์
- Table A (demo20): ข้อมูลต้นทาง
- Table B (demo21): ข้อมูลเปรียบเทียบ
- Table C (demo22): ตารางปลายทางสำหรับข้อมูลที่อยู่ใน A แต่ไม่อยู่ใน B
คำสั่ง SQL
INSERT INTO demo22 (id, name)
SELECT tbl1.id, tbl1.name
FROM demo20 tbl1
LEFT JOIN demo21 tbl2 ON tbl2.id = tbl1.id
WHERE tbl2.id IS NULL;
ข้อมูลตัวอย่าง
demo20: (100,John), (101,Bob), (102,Mike), (103,Carol)
demo21: (100,Sam), (101,Adam), (133,Bob), (145,David)
ผลลัพธ์ใน demo22
| id | name |
|---|---|
| 102 | Mike |
| 103 | Carol |
คำอธิบาย: ID 100, 101 อยู่ในทั้ง A และ B (แม้ name จะต่างกัน) ID 102, 103 อยู่ใน A เท่านั้น → Insert เข้า C
วิธีอื่น: ใช้ NOT EXISTS หรือ NOT IN (ระวัง NULL)