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

การ INSERT ข้อมูลลงตาราง C ถ้าข้อมูลไม่อยู่ในตาราง B โดยเปรียบเทียบกับตาราง A ใน MySQL

การใช้ 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

idname
102Mike
103Carol

คำอธิบาย: ID 100, 101 อยู่ในทั้ง A และ B (แม้ name จะต่างกัน) ID 102, 103 อยู่ใน A เท่านั้น → Insert เข้า C

วิธีอื่น: ใช้ NOT EXISTS หรือ NOT IN (ระวัง NULL)