ถ้าคุณมีตารางข้อมูลอยู่ และรู้ว่ามีบางแถวที่มีข้อมูลซ้ำซ้อนกัน ทางไหนเป็นวิธีที่ดีที่จะสามารถหาและกำจัดแถวที่มีข้อมูลซ้ำนี้ออกไปจากตารางของฐานข้อมูล Oracle ?
อีกวิธีหนึ่งที่เป็นไปได้ในการกำจัดแถวที่ซ้ำซ้อนกันคือการใช้คำสั่ง select distinct และใส่ข้อมูลที่ได้ลงในตารางใหม่ |
จากที่เราสามารถตรวจสอบหาข้อมูลแถวที่มีข้อมูลซ้ำซ้อนกันได้โดยใช้คำสั่ง select ดังนี้
SQL> select a,b,count(*) from test group by a,b;
ผลลัพธ์ที่ได้
A B COUNT(*)
———- ———- ———-
1 2 259
2 2 5
3 0 1
จากตัวอย่างในตาราง test นี้ที่กำหนดไว้ว่าค่าในคอลัมภ์ a และ b จะต้องมีค่าไม่ซ้ำ ซึ่งผลลัพธ์ที่ปรากฏคือ มีข้อมูลซ้ำ 258 แถว และ 4 แถว
เรามาเริ่มต้นกำจัดข้อมูลซ้ำซ้อนอีกวิธีกันเลย
การหาแถวข้อมูลที่ไม่ซ้ำซ้อนกัน
เราสามารถหาข้อมูลที่ไม่ซ้ำซ้อนกันได้โดยใช้คำสั่ง select distinct ดังนี้
SQL> select distinct * from test;
ผลลัพธ์ที่ได้
A B
———- ———-
1 2
2 2
3 0
สร้างตารางใหม่ชั่วคราวเพื่อเก็บผลลัพธ์ที่ได้
SQL> create table new_test as (select distinct * from test);
ตรวจสอบผลลัพธ์ที่ได้ในตารางชั่วคราวนี้
SQL> select * from new_test;
ผลลัพธ์ที่ได้
A B
———- ———-
1 2
2 2
3 0
ทำการลบข้อมูลในตาราง test ทั้งหมด
SQL> truncate table test;
Table truncated.
ทำการเพิ่มข้อมูลกลับไปยังตาราง test จากตารางชั่วคราว
SQL> insert into test (select * from new_test);
3 rows created.
ทำการลบตารางข้อมูลชั่วคราวทิ้ง
SQL> drop table new_test;
Table dropped.
ตรวจสอบกันอีกครั้งว่าข้อมูลยังซ้ำกันอีกหรือไม่โดยใช้คำสั่ง select ดังนี้
SQL> select a,b,count(*) from test group by a,b;
ผลลัพธ์ที่ได้
A B COUNT(*)
———- ———- ———-
1 2 1
2 2 1
3 0 1
นี่ก็เป็นอีกหนึ่งวิธีในการกำจัดแถวที่มีข้อมูลซ้ำซ้อนกันในตาราง แต่เพื่อป้องกันการเกิดการซ้ำซ้อนของข้อมูลเหล่านี้ ขอย้ำอย่าลืมใช้ unique constraints หรือ primary key ช่วยได้ ปัญหาข้อมูลซ้ำซ้อนแบบนี้ก็จะไม่มีทางเกิดขึ้นให้เกิดความปวดหัวได้อีก