要对新表字段进行一些测试,我想假设我的测试数据库中现有记录的某些值。我想为表中的每第8条记录分配一个值。我可以使用以下语法轻松选择每个第8条记录:
select *
from
(select rownum rn
, jeffs_field_to_update
from jeff)
where mod(rn, 8) = 0;
但是,我对SQL很新,我似乎无法将其转换为更新语句。我在这里看到很多关于选择第n条记录的答案,但我已经知道了。任何帮助将不胜感激。
答案 0 :(得分:5)
您需要将此连接到表中任何键的UPDATE语句。例如,如果您有唯一的id列,则update语句将如下所示:
update jeff
set jeffs_field_to_update = value
where id in
(select id
from
(select rownum rn
, jeff.id
from jeff)
where mod(rn, 8) = 0)
答案 1 :(得分:4)
答案较短:
UPDATE jeff
SET jeffs_field_to_update = value
WHERE mod(DBMS_ROWID.ROWID_ROW_NUMBER(ROWID), 8)=0;
答案 2 :(得分:1)
假设您的表具有标识每一行的唯一ID,您可以执行以下操作:
update jeff
set . . .
where id in (select id
from (select rownum as rn, id
from jeff
)
where mod(rn, 8) = 0
)
您还应该能够使用内联可更新视图执行此操作(请参阅here):
update (select jeffs_field_to_update
from (select rownum rn, jeffs_field_to_update
from jeff)
where mod(rn, 8) = 0
) toupdate
set . . .
答案 3 :(得分:1)
即使没有密钥,也可以在oracle中使用rowid来实现此目的。
update mytable
set mycol = new_value
where rowid in
(select rowid from
(select rownum rn, id from mytable)
where mod(rn, 8) = 0)