Get Adobe Flash player

SQL : การลบค่าซ้ำจากการใช้ฟั่งชั่นตรวจสอบ record ซ้ำในตาราง

จากที่เคยเขียนบทความเรื่องการตรวจสอบ record ซ้ำในตอนที่แล้วว่า

SELECT *, ROW_NUMBER() OVER ( PARTITION BY ชื่อcolที่ใช้เป็นเงื่อนไข

ORDER BY ชื่อcolที่ใช้เป็นเงื่อนไข) AS ชื่อcolตั้งใหม่

FROM ชื่อตาราง

จากโค้ดในรูปแบบนี้ จะแสดงจำนวน record ที่มีค่าซ้ำ แสดงในคอลัมน์ใหม่แยกต่างหาก จากการใช้โค้ดในรูปแบบนี้ สามารถนำมาใช้เป็นเงื่อนไข
ในการลบ record ที่มีค่าซ้ำออกไปด้วยการสร้าง CTE หรือนิพจน์ตาราง ดังนี้

WITH ชื่อCTE  AS
(
….โค้ดในการตรวจสอบค่าซ้ำ
)
DELETE FROM ชื่อCTE
WHERE ชื่อcolที่ใช้นับrowที่เป็นค่าซ้ำ > 1

ตัวอย่าง

WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY CITIZEN_ID
ORDER BY CITIZEN_ID) AS RN
FROM EMPLOYEE
)
DELETE FROM CTE
WHERE RN > 1

โค้ดที่แสดงค่าซ้ำ จะนับ row ที่มีค่าต่างๆซ้ำกันเรียงไปแล้วนำมาแสดงในคอลัมน์ RN จากนั้นจะทำการลบ record ที่มีค่า RN มากกว่า 1 (หรือก็คือแถวที่เป็นค่าซ้ำ)ออกไป หลังจากลบแล้ว record จะเหลือแค่ record ที่มีค่า RN = 1 เท่านั้น