使用 ROW_NUMBER() 通过子查询进行更新查询?

making an update query through a subquery using ROW_NUMBER()?

此查询无效错误:01427.00000 - "single-row subquery returns more than one row":

UPDATE table_name SET column_update =( 
  SELECT ROW_NUMBER() 
  OVER(order by column_day_job) from table_name
) WHERE column_pearson_id = 808;

这个 SELECT 完美运行。我想以相同的顺序

复制 sequence_day_job 列的 ROW_NUMBER () 值
SELECT  column_person_id, column_day_job, sequence_day_job,
ROW_NUMBER()
  OVER (PARTITION BY column_person_id
      ORDER BY column_day_job)
  FROM table_name;

UPDATE 10/09/2015 (01) - UPDATE 试图完成类似的事情,但它没有用,如果临时 table 可以解决我的问题问题?临时table的使用,这东西看起来比较简单,cmo会反复出现,相信临时table的使用没那么有趣

 UPDATE table_name SET sequence_day_job = (
 SELECT ROW_NUMBER() OVER (PARTITION BY column_person_id ORDER BY column_day_job)  
       FROM PC_COMENTARIO )xx

) 其中 column_person_id = 808; //错误:01427.00000 - "single-row subquery returns more than one row"

为什么需要子查询。这行不通:

UPDATE table_name
SET column_update = column_day_job

更新 - 我认为您需要这样的东西。语法可能不对,但我认为您需要创建一个虚拟的 table,其中包含您需要的行号,然后选择正确的行。如果 table 中的日期是唯一的,那么您可以使用它们。

UPDATE table_name t1 SET column_update =( 
  SELECT t1.rownum
  from (select ROW_NUMBER() from table_name t2) t3
  where t3.seq_day_job = t1.seq_day_job
) WHERE column_pearson_id = 808;

这应该有效:

MERGE INTO table_name t
USING ( SELECT rowid rid, row_number() OVER (order by sequence_job_day) rn FROM table_name ) u
ON ( t.rowid = u.rid AND t.column_pearson_id = 888 )
WHEN MATCHED THEN UPDATE SET t.column_update = u.rn;

注意 -- column_update 在 table 中的所有行中都是唯一的。如果你只想在每个人中有一个独特的顺序,你需要 PARTITION BY column_pearson_id。另外,您可以将 =888 条件放在 USING 子句中,然后将其从 MATCH 子句中取出。