การเชื่อมโยงระหว่างตารางเป็นเรื่องปกติสำหรับ 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
ขั้นตอนการติดตั้ง Vuetify ใน Laravel
3 เทคนิค เพิ่มความเร็วใน Laravel
ฟังก์ชันวันเวลาที่น่าสนใจใน MySQL
เคล็ดลับการเรียงลำดับข้อมูลใน MySQL
เชื่อมตารางตัวเองใน MySQL ด้วย SELF JOIN
เคล็ดลับเพิ่มประสิทธิภาพการใช้ Google Docs
เทคนิคการใช้ ChatGPT Plus ให้คุ้มค่า คุ้มราคา
เชื่อมหลายฐานข้อมูล MySQL ใน Codeigniter4