1

重複の可能性:
Oracle:ROWNUMをORDERBY句と組み合わせて使用​​してテーブル列を更新する

順序付けられたレコードのセットを返すクエリがあり、結果セットの各行の行番号を、レコード自体のシーケンスと呼ばれる特定のフィールドにコピーしたいと思います。

SELECT ROWNUM, ID
FROM (
    SELECT ID 
    FROM MYTABLE 
    WHERE PARENT = 1
    ORDER BY SEQUENCE ASC
)

各行のIDがあり、フィールドrownumに入力したいと思います。SEQUENCEこの結果セットをループして、それに応じてテーブルを更新するにはどうすればよいですか?

4

2 に答える 2

2
merge into mytable t
using (SELECT ROWNUM rn, ID
       FROM (
         SELECT ID 
         FROM MYTABLE 
         WHERE PARENT = 1
         ORDER BY SEQUENCE ASC
      )) S 
on (t.id=s.id)
when matched then update set
  t.sequence=s.rn

idが一意でない場合は、次のことができます。

merge into mytable t
using (SELECT ROWNUM rn, rwd
       FROM (
         SELECT rowid rwd
         FROM MYTABLE 
         WHERE PARENT = 1
         ORDER BY SEQUENCE ASC
      )) S 
on (t.rowid=s.rwd)
when matched then update set
  t.sequence=s.rn
于 2013-01-31T12:42:50.860 に答える
1

してみてください:

  merge into EMP_MASTER x
  using (
          SELECT ID, ROW_NUMBER() OVER(ORDER BY SEQUENCE) y
          FROM MYTABLE 
          WHERE PARENT = 1
         ) s on (s.ID=x.ID)
         when matched then update set
  x.sequence=s.y;

これは一意のIDで機能します。

于 2013-01-31T12:45:11.540 に答える