web-dev-qa-db-ja.com

Oracle:1つのフィールドを更新しながら行をコピーする

注意:私am私が答えたい質問をします。この質問は、データベースの設定が不十分であることを意味します。したがって、テーブルの設定方法を変更することを提案する回答はすべて投票します。

1つの値を変更しながら、一連の行を複製する必要があります。

name   col1 col2
dave   a    nil
sue    b    nil
sam    c    5

になる必要があります:

name   col1 col2
dave   a    nil
dave   a    a
sue    b    nil
sue    b    a
same   c    5

col2 is nullであるこのテーブルのすべてのエントリのIEは、namecol1がコピーされ、col2aであるテーブルに新しいエントリを作成します。

14
David Oneill

使用する:

INSERT INTO table
  (name, col1, col2)
SELECT t.name, t.col1, 'a'
  FROM TABLE t
 WHERE t.col2 IS NULL

これは、namecol1列は主キーであるか、どちらかに一意の制約があります。

17
OMG Ponies

これはそれをしますか?

INSERT INTO yourtable
       (SELECT name, col1, 'a'
          FROM yourtable 
         WHERE col2 is NULL);
3
DCookie

列の数が多い場合は、必要なデータを一時テーブルにコピーし、必要に応じて一時テーブルのデータを変更してから、一時テーブルの内容を元にコピーして、一時テーブルを削除できます。

0
Kenny Hung