2009-09-18 88 views
3

這兩個語句是否相同?SQL Server中的別名

UPDATE Table1 SET Field1=( 
SELECT Field2 FROM Table2 
WHERE Table1.ID=Table2.ID 
) 
FROM Table1 
WHERE Field1 is null 



UPDATE t SET Field1=( 
SELECT Field2 FROM Table2 
WHERE t.ID=Table2.ID 
) 
FROM Table1 t 
WHERE Field1 is null 

我正在嘗試減少別名的數量。 我覺得給一個語句添加一個別名只會添加另一個表名來跟蹤精神。

我擔心的是,在示例1中,由於我沒有使用別名,它將更新整個table1,而不是在WHERE上過濾。

當需要別名時,什麼是經驗法則?

回答

7

是的,它們是等價的,因爲別名不會改變語句的效果,只會改變其可讀性或解決模糊性。

但我會做到這一點:

UPDATE Table1 
SET Field1 = Table2.Field2 
FROM Table1 
INNER JOIN Table2 ON Table1.ID=Table2.ID 
WHERE Table1.Field1 is null 

或本

UPDATE t1 
SET Field1 = t2.Field2 
FROM Table1 t1 
INNER JOIN Table2 t2 ON t1.ID=t2.ID 
WHERE t1.Field1 is null 

使用別名,以幫助可讀性。就我個人而言,我喜歡爲每個表使用簡短的別名(1-3個字符),並且總是儘可能使用相同的別名,以便隨時改變可讀性。

+0

哦,是的,這是更清潔。 – 2009-09-18 18:09:29

5

這兩個陳述是等價的,是的。

我幾乎總是在我的查詢中使用別名。它保持了一定的長度,而且我個人認爲它使事情變得更容易閱讀,因爲一個簡短的別名使字段名稱更突出。

如果您使用完整的表名稱,它會使事情混亂,並且很難區分您正在使用的字段(一目瞭然)。

+0

我敬畏StackOverflow ....你們如何看問題被問? – 2009-09-18 18:10:12

+0

它還使您在跨數據庫引用事物時更易於閱讀。例如,我們的批處理進程爲批量處理創建特定的命名錶。因爲他們無法知道另一個進程是否正在使用表名#delete,所以我們創建一個表[v50_work_a]。[dbo] .x_work_123456並使用'W'將其別名。讀'W.column'比「[v50_work_a]。[dbo] .x_work_123456.column」容易得多,我知道'W'='處理私人工作表'。 – DaveE 2009-09-18 18:11:10

3

這些陳述是等同的。

只有當您引用表格兩次時才需要別名,以避免模糊不清。

+0

當語句是:UPDATE TABLE1 ... FROM Table1,我指的是表兩次? – 2009-09-18 18:03:56

+0

好吧,你指的是同一張表兩次。但我猜他是指當你提到同一張表的兩個副本時,例如FROM Table1 t1 INNER JOIN Table1 t2 ... – Rory 2009-09-18 18:10:13

+0

如果使用派生表,這也是必需的。 – HLGEM 2009-09-18 19:00:30