Sql 使用update语句中的当前行
我想做的是: 我有一个包含多个作者的表Sql 使用update语句中的当前行,sql,sql-update,row-number,inner-query,Sql,Sql Update,Row Number,Inner Query,我想做的是: 我有一个包含多个作者的表SingleAuthor。此表有时多次包含同一作者。我要做的是更新表并添加作者特定的编号。例如: 卫星名称->卫星行号 弗雷迪->1 作者2->2 弗雷迪->1 另一个->3 我已经有了给出以下结果的查询: 在(按卫星名称排序)上选择行号(), 卫星名称 来自SingleAuthor 按卫星名称分组 但问题是,我想在sat\u rowNumber列中插入此数据。 我提出了这样一个问题: UPDATE SingleAuthor SET sat_rowNumb
SingleAuthor
。此表有时多次包含同一作者。我要做的是更新表并添加作者特定的编号。例如:
卫星名称->卫星行号弗雷迪->1
作者2->2
弗雷迪->1
另一个->3 我已经有了给出以下结果的查询:
在(按卫星名称排序)上选择行号(),
卫星名称
来自SingleAuthor
按卫星名称分组
但问题是,我想在sat\u rowNumber
列中插入此数据。
我提出了这样一个问题:
UPDATE SingleAuthor SET sat_rowNumber = ( SELECT newTable.numb
FROM(
SELECT ROW_NUMBER() OVER( ORDER BY sat_name) as numb, sat_name
FROM SingleAuthor
GROUP BY sat_name) AS newTable
WHERE newTable.sat_name =) -- the current row in the to be updated table
我要做的是将SingleAuthor
表的sat\u行数
更新为newTable.numb
,其中当前行sat\u名
等于newTable
中的sat\u名
关于如何在update语句中引用待更新表的任何见解?您的问题的答案是:
where newTable.sat_name = SingleAuthor.sat_name
它将引用外部表,因为子查询中的表超出范围。但是,如果这是一个问题,您可以给子查询中的别名不同
我认为您可以更高效地编写查询,如下所示:
with toupdate as (
select sa.*, dense_rank() over (order by sat_name) as newVal
from SingleAuthor sa
)
update toupdate
set sat_RowNumber = newval
densite\u rank()
函数的作用与聚合值上的row\u number()
完全相同