การลบข้อมูลที่ซ้ำกันในฐานข้อมูล

วันนี้ขอเสนอเรื่องการลบข้อมูลที่ซ้ำกันในฐานข้อมูล โดยการซ้ำกันนั้นจะซ้ำกันทั้งหมดทุก Column หรือบาง Column ก็แล้วแต่ แต่ส่วนสำคัญคือมันต้องซ้ำกันน่ะ 555+

มาลองดูกันครับ ทีนี้ที่ผมใช้บ่อย ๆ ก็จะเป็น MSSQL และ MySQL ก็จะเสนอเฉพาะสองตัวนี้แล้วกัน อิอิ
เรามาดูของ MSSQL กันก่อนครับ โดยคำสั่งก็จะเป็นแบบนี้

WITH CTE AS(
SELECT [col1], [col2], [col3], [col4], [col5], [col6], [col7],
RN = ROW_NUMBER()OVER(PARTITION BY col1 ORDER BY col1)
FROM dbo.Table1
)
DELETE FROM CTE WHERE RN > 1

แปลจากคำสั่ง คือ เราเรียกข้อมูลที่เราต้องการนำมาตรวจสอบขึ้นมา เช่น col1-col7 และ กำหนดตัวแปร RN ให้ใช้ function ROW_NUMBER() มานับจำนวนที่ซ้ำกันของ Column ที่เราต้องการนับ จากตัวอย่างคือ นับ Column col1 ว่ามีการซ้ำกันของข้อมูลเท่าไร มาเก็บไว้ใน ตารางสำรองที่ชื่อว่า CTE จากนั้นก็ใช้คำสั่ง DELETE ลบข้อมูล ที่มี RN มากกว่า 1 เป็นอันจบพิธี

ดูวิธีของ MySQL กันบ้างครับ ง่ายกว่า คำสั่งของ MSSQL ด้านบนเยอะมาก 555+

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name

ความหมายคือ ให้เรากำหนดตารางที่ชื่อว่า names เป็น สองตาราง โดยใช้ตัวแปรแยกกันเป็น n1 และ n2 และเอาสองตารางมา join กันด้วย Column ที่ซ้ำกัน และให้ลบ id ที่มากกว่าทิ้งไป

หากต้องการลบ id ที่น้อยกว่าทิ้งไปก็เพียงให้ใช้เครื่องหมาย < แค่นั้นเอง ตามตัวอย่างด้านล่าง

DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
คำสั่งที่ใช้กับ MySQL นี้ สามารถนำไปใช้กับ MSSQL ได้ด้วยเหมือนกันนะครับ
สุดท้ายนี้ ขอขอบคุณที่เข้ามาอ่านกัน ขอให้ได้ความรู้ และนำไปใช้งานกันได้ครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *

Share35
Tweet
Pin
+1
Share
35 Shares