การเชื่อมโยงระหว่างตารางเป็นเรื่องปกติสำหรับ MySQL แต่คุณรู้หรือไม่ว่า มันสามารถเชื่อมตารางตัวเองก็ได้นะ (Self JOIN) โดยการใช้ INNER JOIN หรือ LEFT JOIN
สารบัญเนื้อหา
SELF JOIN คืออะไร ?
SELF JOIN เป็นการเชื่อมตาราง (join) ตัวมันเอง แทนที่จะเชื่อมกับตารางอื่น การจะใช้ SELF JOIN ได้นั้นจำเป็นต้องใช้ table aliases หรือการตั้งชื่อให้กับตาราง ซึ่งเราจะตั้งชื่อคนละชื่อกัน ถ้าเป็นชื่อเดียวกันจะเกิด error
ทำไมต้องใช้ SELF JOIN และมันใช้ยังไง ?
ใช้กับข้อมูลที่มีลำดับชั้น (Hierarchical Data)
เมื่อมีการเก็บข้อมูลที่เป็นลำดับชั้น เช่น organizational chart, category ในรูปแบบ tree, ข้อมูลบทสนทนา คุณสามารถใช้ Self JOIN ได้ ยกตัวอย่างเช่น ต้องการแสดงรายชื่อพนักงานและผู้จัดการของพนักงานคนนั้น ในตาราง employees
SELECT e1.employee_name AS employee, e2.employee_name AS manager
FROM employees e1
LEFT JOIN employees e2 ON e1.manager_id = e2.employee_id
เพื่อตรวจสอบความเปลี่ยนแปลง (Tracking Changes)
ถ้าคุณมีตาราง audit_log ที่ใช้สำหรับดูการเปลี่ยนแปลง คุณสามารถใช้ SELF JOIN ในการเปรียบเทียบระหว่างเวอร์ชันปัจจุบันกับ กับเวอร์ชันก่อนหน้านี้ได้ เช่น
SELECT current.*, previous.*
FROM audit_log current
LEFT JOIN audit_log previous
ON current.record_id = previous.record_id AND current.timestamp > previous.timestamp
อธิบาย Query
- ใช้ LEFT JOIN ในการเชื่อม เนื่องจากอาจไม่มีข้อมูลเวอร์ชันก่อนหน้านี้
- เงื่อนไขในการเชื่อมไม่จำเป็นต้องเป็นการเท่ากับเสมอไป สามารถใช้การเปรียบเทียบทางคณิตศาสตร์แบบอื่นก็ได้ เช่น น้อยกว่า มากกว่า
หาข้อมูลที่มีความสัมพันธ์กัน
เพื่อให้เกิดความเข้ามากขึ้นในการหาข้อมูลที่มีความสัมพันธ์ในตารางเดียวกัน ขอยกตัวอย่างการเชื่อมตารางลูกค้า (customers) ที่มีที่อยู่เดียวกัน คุณสามารถใช้ SELF JOIN ได้ โดยดูจาก SQL นี้
SELECT c1.customer_name AS customer1, c2.customer_name AS customer2, c1.address
FROM customers c1
JOIN customers c2 ON c1.address = c2.address AND c1.customer_id <> c2.customer_id
อธิบาย Query
- การใช้เงื่อนไขในการ JOIN ว่า c1.customer_id <> c2.customer_id เป็นการบอกว่าต้องไม่ใช่ customer_id เดียวกัน
ลองนำวิธีนี้ไปประยุกต์ใช้กันดูนะครับ ขอบคุณที่ติดตามครับ
ขอบคุณข้อมูลดีๆจาก : mysqltutorial.org , javatpoint.com
command line ตรวจสอบ spec ใน Windows OS
วิธีผูก วินิจฉัย (Diagnosis) กับ วัคซีน (Vaccine)
ETL ใน Data Engineering คืออะไร?
แก้ปัญหา export ภาษาไทยเพี้ยน ของ MySQL ใน phpMyAdmin
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4