დუბლიკატი ჩანაწერები
მიუხედავად დიდი ყურადღებისა არის ხოლმე შეგნებული თუ თვითნებური შემთხვევები როდესაც ცხრილში ხდება ჩანაწერის დუბლირება. განვიხილოთ ამოცანა რომელიც ითვალისწინებთ დუბლირებულ იჩანაწერების მოშორებას ცხრილიდან
ავიღოთ ცხრილი
1 2 3 4 5 6 | CREATE TABLE DUBL_TEST ( FNAME VARCHAR2(200), AGE NUMBER, BIRTHDAY DATE ) |
და ჩავსვათ მონაცემები შემდეგი სახით
1 2 3 4 5 | aleko | 25 | 19/11/2007 aleko | 25 | 19/11/2007 nino | 27 | 13/11/2007 nino | 27 | 13/11/2007 aleko | 20 | 19/11/2007 |
ეხლა ამ ცხრილიდან ამოვიღოთ ის ჩანაწერები რომელსაც გააჩნია დუბლიკატები
1 2 3 4 | SELECT fname, age, birthday FROM ( SELECT a1.* FROM dubl_test a1, dubl_test a2 WHERE a1.fname=a2.fname AND a1.age=a2.age AND a1.birthday=a2.birthday AND a1.rowid<>a2.rowid ) GROUP BY fname, age, birthday |
შედეგად ჩვენ მივიღეთ ესეთი რეზულტატი –
1 2 | aleko | 25 | 19/11/2007 nino | 27 | 13/11/2007 |
ყველაფერი სწორია. ეხლა ამოვიღოთ ის ჩანაწერები რომლებსაც ჩვენ DUBL_TEST ცხრილში არ გააჩნია დუბლიკატი ჩანაწერები
1 2 3 4 | SELECT fname, age, birthday FROM dubl_test WHERE rowid NOT IN (SELECT a1.rowid FROM dubl_test a1, dubl_test a2 WHERE a1.fname=a2.fname AND a1.age=a2.age AND a1.birthday=a2.birthday AND a1.rowid<>a2.rowid) |
ესეც ესე… ე.ი. ჩვენ მივიღეთ 2 ცხრილი სადაც პირველში დუბლიკატებისგან გაცხრილული ჩანაწერები და მეორეში ის ჩანაწერები რომლებსაც უბრალოდ არ გააჩნდა დუბლიკატები. ეხლა მივიღოთ ეს ორი ცხრილისგან 1 ცხრილი რომელიც იქნება საბოლოო რეზულტატი ჩვენი ამოცანისა –
1 2 3 4 5 6 7 8 9 | SELECT fname, age, birthday FROM ( SELECT a1.* FROM dubl_test a1, dubl_test a2 WHERE a1.fname=a2.fname AND a1.age=a2.age AND a1.birthday=a2.birthday AND a1.rowid<>a2.rowid ) GROUP BY fname, age, birthday UNION ALL SELECT fname, age, birthday FROM dubl_test WHERE rowid NOT IN (SELECT a1.rowid FROM dubl_test a1, dubl_test a2 WHERE a1.fname=a2.fname AND a1.age=a2.age AND a1.birthday=a2.birthday AND a1.rowid<>a2.rowid) |
შედეგი –
1 2 3 | aleko | 25 | 19/11/2007 nino | 27 | 13/11/2007 aleko | 20 | 19/11/2007 |