5

新しいテーブル フィールドでいくつかのテストを行うために、テスト データベース内の既存のレコードでいくつかの値を偽装したいと考えています。テーブルの 8 番目のレコードごとに値を割り当てたい。次の構文を使用して、8 番目のレコードごとに簡単に選択できます。

select *
from 
  (select rownum rn
    , jeffs_field_to_update
  from jeff)
where mod(rn, 8) = 0;

ただし、私は SQL にかなり慣れていないため、これを更新ステートメントに変換できないようです。n 番目のレコードの選択については、ここで多くの回答が見られますが、既に取得しています。任意の支援をいただければ幸いです。

4

4 に答える 4

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)
于 2013-06-21T13:28:25.757 に答える
4

短い答え:

UPDATE jeff 
SET jeffs_field_to_update = value 
WHERE mod(DBMS_ROWID.ROWID_ROW_NUMBER(ROWID), 8)=0;
于 2013-06-21T13:53:05.980 に答える
1

キーがなくても、この目的のためにオラクルでROWIDを使用できます。

update mytable
set mycol = new_value
where rowid in
(select rowid from 
  (select rownum rn, id from mytable)
where mod(rn, 8) = 0)
于 2013-06-21T13:34:30.390 に答える