Author: benjawan.n

  • อีกหนึ่งวิธีในการกำจัดข้อมูลที่ซ้ำซ้อนกันในตาราง

    ถ้าคุณมีตารางข้อมูลอยู่ และรู้ว่ามีบางแถวที่มีข้อมูลซ้ำซ้อนกัน ทางไหนเป็นวิธีที่ดีที่จะสามารถหาและกำจัดแถวที่มีข้อมูลซ้ำนี้ออกไปจากตารางของฐานข้อมูล 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 ช่วยได้ ปัญหาข้อมูลซ้ำซ้อนแบบนี้ก็จะไม่มีทางเกิดขึ้นให้เกิดความปวดหัวได้อีก