gpt4 book ai didi

sql - 在更新语句中使用当前行

转载 作者:行者123 更新时间:2023-12-04 14:23:09 27 4
gpt4 key购买 nike

我想做的是:我有一个包含多个作者的表 SingleAuthor .该表有时多次包含同一作者。我想要做的是更新表格并添加作者特定编号。例如:

sat_name -> sat_rowNumber
Freddy -> 1
Author2 -> 2
Freddy -> 1
AnotherOne -> 3

我已经有给我这个结果的查询:

SELECT ROW_NUMBER() OVER( ORDER BY sat_name),<br/>
sat_name<br/>
FROM SingleAuthor<br/>
GROUP BY sat_name

但问题是,我想将此数据插入 sat_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_rowNumbernewTable.numb当前行所在的位置sat_name等于 sat_namenewTable .

关于如何在更新语句中引用待更新表的任何见解?

最佳答案

你的问题的答案是:

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

dense_rank() 函数对聚合值执行的操作与您使用 row_number() 执行的操作完全相同。

关于sql - 在更新语句中使用当前行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com