0

次の列を含む Table1 と Table2 という 2 つのテーブルがあり、Table2 に存在する同じ列の値で Table1 の列を結合して更新する必要があります。

結合条件の列:

  1. Table1.mem_ssn と Table2.ins_ssn
  2. Table1.sys_id と Table2.sys_id
  3. Table1.grp_id と Table2.grp_id

更新する列:

Table1.dtofhire=Table2.dtofhire

Oracle 11Gで上記の列を(ループせずに単一の更新クエリを使用して)一括更新する方法が必要です。

Table1 はデータ アップロードのステージング テーブルとして使用されるため、指定されたキー制約は含まれていません。

同じものを更新するのを手伝ってください。

4

2 に答える 2

2

MERGEステートメントを使用できます。
次のようになります。

MERGE INTO table1 D
   USING (SELECT * FROM table2 ) S
   ON (D.mem_ssn = S.ins_ssn and D.sys_id = S.sys_id and D.grp_id=S.grp_id)
   WHEN MATCHED THEN 
     UPDATE SET D.dtofhire=S.dtofhire;

更新:
table2 に同じ (ins_ssn,sys_id,grp_id) を持つ複数の行があり、 maxdtofhireが必要なため、 using 句のクエリを変更する必要があります。

 MERGE INTO table1 D
   USING (SELECT ins_ssn, sys_id, grp_id, max(dtofhire) m_dtofhire
            FROM table2 
        GROUP BY ins_ssn,sys_id,grp_id) S
   ON (D.mem_ssn = S.ins_ssn and D.sys_id = S.sys_id and D.grp_id=S.grp_id)
   WHEN MATCHED THEN 
     UPDATE SET D.dtofhire=S.m_dtofhire;
于 2012-05-29T13:35:12.313 に答える
0

機能に到達するために使用したクエリを以下に示します

UPDATE table1  T2 
SET    dtofhire = (SELECT Max(dtofhire) AS dtofhire 
           FROM   table2 T1 
           WHERE  T2.mem_ssn = T1.ins_ssn 
              AND T2.sys_id = T1.sys_id 
              AND T2.grp_id = T1.grp_id 
           GROUP  BY ins_ssn, 
               sys_id, 
               grp_id) 
WHERE  ( mem_ssn, sys_id, grp_id ) IN (SELECT ins_ssn, 
                        sys_id, 
                        grp_id 
                     FROM   table2 );
于 2012-05-30T13:38:02.280 に答える