SQL Server:如何在更新语句中使用别名?

Posted

技术标签:

【中文标题】SQL Server:如何在更新语句中使用别名?【英文标题】:SQL Server: how to use alias in update statement? 【发布时间】:2017-08-16 14:06:18 【问题描述】:

我想知道以下查询:

   UPDATE statisticsTable
   SET Value = (select count(*) 
                FROM OtherTable o
                WHERE o.UserId = UserId ) <-- this is the part that concerns me
   WHERE id in (1,2,3) 

SQL Server 如何知道第二个“UserId”字段来自 statisticsTable 而不是来自 OtherTable ? 为什么我不能为统计表提供别名,例如 'stat' 以阐明我想从哪里获得该 UserId ?或者有什么办法?

【问题讨论】:

这工作正常吗?我通常会做类似WHERE o.UserId = statisticsTable.UserId 的事情。 ***.com/questions/4981481/… 你不能在你的子查询中有UPDATE statisticsTable as s然后有WHERE o.UserID = s.UserId吗?我还没有测试过这个。我从未有过需要子查询的 UPDATE。 【参考方案1】:

SQL Server 支持使用连接进行更新。 这意味着您可以像这样编写查询:

UPDATE s
SET Value = d.NumOfRows
FROM statisticsTable s
INNER JOIN
(
     SELECT UserId, COUNT(*) As NumOfRows
     FROM OtherTable
     GROUP BY UserId
) d ON s.UserId = d.UserId
WHERE id in (1,2,3) 

【讨论】:

这是我以前从未见过的。谢谢! Glad to help :-) 我将您标记为答案并点赞以表示感谢 :-)【参考方案2】:

试试这个:

UPDATE s
   SET Value = x.cnt
from statisticsTable s
 outer apply (select count(*) as cnt
                FROM OtherTable o
                WHERE o.UserId = s.UserId ) x
WHERE s.id in (1,2,3) 

【讨论】:

以上是关于SQL Server:如何在更新语句中使用别名?的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 种JOIN后的语句无法别名

sql语句中别名怎么使用

SQL Server 数据库的SELECT 语句基本用法介绍

SQL Server 在更新语句中排序

SQL语句中,子句不能使用列别名问题

为啥在SQL语句的GROUP BY里面不可以使用别名