การหาลำดับตัวเลขที่ขาดหาย (Gap) ใน MySQL
ใช้ LEFT JOIN เพื่อหาค่าตัวเลขที่ขาดหายไปในลำดับ (Sequence) โดยเปรียบเทียบแถวปัจจุบันกับแถวถัดไป
สร้างตารางและข้อมูลทดสอบ
CREATE TABLE FindValue (SequenceNumber INT); INSERT INTO FindValue VALUES (109), (110), (111), (113), (114);
ข้อมูลขาดค่า 112
คำสั่ง SQL
SELECT tbl1.SequenceNumber + 1 AS ValueNotUsedInSequenceNumber FROM FindValue AS tbl1 LEFT JOIN FindValue AS tbl2 ON tbl1.SequenceNumber + 1 = tbl2.SequenceNumber WHERE tbl2.SequenceNumber IS NULL ORDER BY tbl1.SequenceNumber LIMIT 1;
ผลลัพธ์
+------------------------------+ | ValueNotUsedInSequenceNumber | +------------------------------+ | 112 | +------------------------------+
การทำงาน
- tbl1 = ตารางต้นฉบับ
- tbl2 = ตารางเดียวกันแต่ JOIN ด้วยเงื่อนไขค่าถัดไป
- WHERE tbl2.SequenceNumber IS NULL = หาค่าที่ไม่มีคู่ใน tbl2 (ค่าขาดหาย)
- ORDER BY ... LIMIT 1 = เอาค่าขาดหายตัวแรก (น้อยสุด)
ขยายใช้งาน
ลบ LIMIT 1 เพื่อดูค่าขาดหายทั้งหมด