SQL Server中的别名

时间:2009-09-18 17:56:44

标签: 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上过滤Field1为null。

需要别名时的经验法则是什么?

3 个答案:

答案 0 :(得分: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个字符),尽可能在同一个表中使用相同的别名,以便随着时间的推移提高可读性。

答案 1 :(得分:5)

这两个陈述是等价的,是的。

我几乎总是在查询中使用别名。它保持了长度,并且我个人认为它使事情更容易阅读,因为短的别名使得字段名称更加突出。

如果您使用完整的表格名称,它会使事情变得混乱,并且很难区分您正在使用哪些字段(一目了然)。

答案 2 :(得分:3)

这些陈述是等效的。

只有在您引用表格两次时才需要别名,以避免歧义。