使用update语句中的当前行

时间:2012-12-20 15:03:31

标签: sql sql-update row-number inner-query

我要做的是以下内容: 我有一个包含多位作者SingleAuthor的表格。该表有时不止一次包含同一作者。我想要做的是更新表并添加作者特定的号码。例如:

  

sat_name - > sat_rowNumber
  弗雷迪 - > 1
  作者2 - > 2
  弗雷迪 - > 1
  AnotherOne - > 3

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

SELECT ROW_NUMBER() OVER( ORDER BY sat_name),
sat_name
FROM SingleAuthor
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_rowNumber更新为newTable.numb,其中当前行sat_name等于sat_name中的newTable {1}}。

有关如何在update语句中引用要更新的表的任何见解?

1 个答案:

答案 0 :(得分:6)

您的问题的答案是:

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()完全相同。