2009-09-18 62 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