הבלוג של גרי רשף

15/12/2009

מחיקת רשומות כפולות

Filed under: Uncategorized — תגיות: , , — גרי רשף @ 13:30

לעיתים נוצרות בטבלת עזר רשומות כפולות בשל טעות בקוד שהכניס פנימה נתונים או אולי בגלל כפילות מידע במקורות המידע השונים שמזינים אותה, וכעת יש למחוק כך שמכל רשומה – תישאר רק אחת.

פעם הסיפור היה מסובך: היינו בונים טבלת עזר, מעבירים את הנתונים מהטבלה המקורית לטבלת העזר בעזרת Distinct, מוחקים את הנתונים מהטבלה המקורית, מעתיקים את הנתונים מטבלת העזר לטבלה המקורית, ולסיום- מבטלים את טבלת העזר..

כיום זה קצת יותר פשוט:

ניצור טבלה להדגמה

   Create Table #Tmp(name VarChar(Max),

                    object_id Int,

                    schema_id Int,

                    type_desc VarChar(100));

נכניס לתוכה 5 פעמים את הנתונים מטבלת המערכת sys.objects (בעזרת פטנט נחמד שלא מזיק להכיר)

    Insert Into #Tmp

    Select    name,

            object_id,

            schema_id,

            type_desc

    From    sys.objects;

    Go 5

ניתן לראות בקלות שכל רשומה מופיעה 5 פעמים

    Select    *

    From    #Tmp

    Order By object_id;

כעת ניצור CTE שממספר את השורות הכפולות, ונשתמש בו כדי למחוק את כל אלו שהמספר שלהן גדול או שווה 2

    With T As

    (Select    Row_Number() Over (Partition By name,object_id,schema_id,type_desc Order By name) Num

    From    #Tmp)

    Delete

    From    T

    Where    Num>=2;

ונוודא שלא נותרו רשומות כפולות

    Select name,object_id,schema_id,type_desc

    From    #Tmp

    Group By name,object_id,schema_id,type_desc

    Having Count(*)>1;

הערות: ב-CTE יש לציין ברשימת השדות של ה-Partition By את כל השדות שבטבלה,

וב-Order By את אחד השדות – לא משנה איזה (ממילא כל הרשומות זהות).

מודעות פרסומת

תגובה אחת »

  1. בהצלחה לך!

    תגובה של חבר — 15/12/2009 @ 21:28


RSS feed for comments on this post. TrackBack URI

להשאיר תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: