0

私は2つのテーブルを持っています。

まあ言ってみれば:

Table T1 with columns id,ref,a1,b1,c1,d1,e1
Table T2 with columns id,ref,a2,b2,c2,d2,e2

その場合、 whereのT2(a2,c2,e2)値に関していくつかの列を更新する必要があります。T1(a1,c1,e1)T1.ref = T2.refref=<certain value>

ref 列の特定の値について、各テーブルに多くのレコードがあります。

ref 列の特定の値について、T1に関してT2を更新したいと考えています。他のレコードは変更されません。

現在、 whereのすべての行を削除してT2現在の行を挿入することでこれを行っています。T1ref=<some value>

例: ref 値 = 5の場合

次に、これらの手順を実行します。

1. delete from T2 where ref=5;
2. insert into T2 (a2,c2,e2) select a1,c1,e1 from T1 where T1.ref = 5;

確かに、これは 2 つのテーブル間でデータを同期するための適切な方法ではありません。

Oracleでこれを達成するための効率的なソリューションを提案してください。

私は重要なポイントを逃したと思います。両方のテーブルには、各レコードを明確に識別する列が 1 つあります。したがって、T1に存在しないレコードをT2に入れたくありません。繰り返しますが、列「ref」の値に対して、両方のテーブルが複数のレコードを返し、各レコードには一意の識別列があります。T1 で識別されたこれらのレコードは、T2 にのみ存在する必要があります。

前もって感謝します!

4

2 に答える 2

0

次のようなものが必要だと思います:

update t2 
  set (a2,c2,e2) = (select a1,c1,e1 from t1 where t1.ref = 5)
  where t2.ref = 5;

ただし、ネストされたクエリが 1 つの行のみを生成することを確認する必要があります。

于 2013-05-27T09:55:36.167 に答える