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

04/04/2011

הידעתם? Except מבצע Distinct

Filed under: Uncategorized — תגיות: , , , , — גרי רשף @ 20:21

לאחר שקראתם את הכותרת- אתם יודעים מה אני הולך להראות.
ניצור שתי טבלאות צנועות:

Use tempdb;

Go


Create Table Tbl1(I Int);

Go


Insert

Into Tbl1

Select 1 I Union All

Select 1 I Union All

Select 2 I Union All

Select 2 I;

Go


Create Table Tbl2(I Int);

Go


Insert

Into Tbl2

Select 1 I;

Go


Select * From Tbl1;

Select * From Tbl2;

Go

clip_image002

וכעת נבצע Except (כלומר- נחסיר מהראשונה את השניה):

Select * From Tbl1

Except

Select * From Tbl2;

Go

clip_image004

העובדה ש-1 בטבלה השניה קיזז פעמיים 1 בראשונה – אפשר להבין,

אבל מדוע ה-2 הכפול הצטמצם לשורה אחת?

אין זאת אלא שהמערכת מבצעת Distinct לפני ה-Except:

clip_image006

למי שזה לא מתאים לו- אפשר לאלתר פתרון:

Select Row_Number() Over(Partition By I Order By I),* From Tbl1

Except

Select Row_Number() Over(Partition By I Order By I),* From Tbl2;

Go

clip_image008

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

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

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

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

מתחבר ל-%s

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

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