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

04/04/2011

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

שייך לקטגוריה: 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 של התגובות על הרשומה הזו טרקבאק קישור

כתיבת תגובה

Fill in your details below or click an icon to log in:

WordPress.com Logo

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

Twitter picture

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

Facebook photo

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

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.

הצטרפו אל 25 שכבר עוקבים אחריו