4

テーブルにデータの行があります:

Key | Val1 | Val2
----+------+-----
1   | A    | B

この行をコピーしたいのですが、新しい各行にリストから異なるキー(実際には外部キー)を割り当てます。

New keys
--------
2
3
4

このリストは、クエリを介して簡単に取得できます。複製後、テーブルは次のようになります。

Key | Val1 | Val2
----+------+-----
1   | A    | B
2   | A    | B
3   | A    | B
4   | A    | B

これまでのところ、私が思いついたのはこれだけです:

INSERT INTO table (Key, Val1, Val2) (
    SELECT '2' AS Key, Val1, Val2 FROM table WHERE Key='1'
);

これは機能しますが、もちろん一度に1行しかコピーしません。すべての行を一度にコピーする方法はありますか?

違いがあれば、私はOracleを使用しています。

4

1 に答える 1

4

SELECT .. FROM DUALを使用して値を作成し、UNIONALLを使用して複数の行を1つの結果に結合することができます。再帰共通テーブル式など、結果セットを作成する方法は他にもさまざまです。

INSERT INTO table (Key, Val1, Val2)
SELECT d.newKey, t.Val1, t.Val2
FROM table t
cross join (select 2 NewKey from dual union all
            select 3 NewKey from dual union all
            select 4 NewKey from dual) d;

新しいキーがサブクエリからのものである場合、それはさらに簡単になります。

INSERT INTO table (Key, Val1, Val2)
SELECT d.FKey, t.Val1, t.Val2
FROM table t
cross join (select FKey
            from SomeOtherTable
            Where ......) d;

ただし、とをコピーしているため、外部キーごとに同時にすべてのレコードを複製することに注意しFROM tableてくださいINTO tabletable

于 2012-10-23T04:06:04.317 に答える