2016-11-03 9 views
-2

私は以下の2つのテーブルを持っています。Table1.Active_flagYに更新する必要があります。Table2.Reprocess_FlagNです。oracleで2つのテーブルを結合して更新しました

表1

+--------+--------------+--------------+--------------+-------------+ 
| Source | Subject_area | Source_table | Target_table | Active_flag | 
+--------+--------------+--------------+--------------+-------------+ 
| a  | CUSTOMER  | ADS_SALES | ADS_SALES | N   | 
| b  | CUSTOMER  | ADS_PROD  | ADS_PROD  | N   | 
| CDW | SALES  | CD_SALES  | CD_SALES  | N   | 
| c  | PRODUCT  | PD_PRODUCT | PD_PRODUCT | N   | 
| d  | PRODUCT  | PD_PD1  | PD_PD1  | N   | 
| e  | ad   | IR_PLNK  | IR_PLNK  | N   | 
+--------+--------------+--------------+--------------+-------------+ 

表2

| Source | Subject_area | Source_table | Target_table | Reprocess_Flag | 
+--------+--------------+--------------+--------------+----------------+ 
| a  | CUSTOMER  | ADS_SALES | ADS_SALES | N    | 
| b  | CUSTOMER  | ADS_PROD  | ADS_PROD  | N    | 
| CDW | SALES  | CD_SALES  | CD_SALES  | N    | 
| c  | PRODUCT  | PD_PRODUCT | PD_PRODUCT | Y    | 
| d  | PRODUCT  | PD_PD1  | PD_PD1  | Y    | 
| e  | ad   | IR_PLNK  | IR_PLNK  | N    | 
+--------+--------------+--------------+--------------+----------------+ 
+0

あなたの質問は読めません。 – FDavidov

+0

何か試しましたか?投稿あなたのコードください – Aleksej

+0

UPDATE hdfs_cntrl SETのactive_flag = 'Y' どこにあるソース(proc_cntrlから選択ソースどこReprocess_Flag = 'N') とsubject_area中を(proc_cntrlからsubject_areaを選択する場所Reprocess_Flag = 'N') とSOURCE_TABLEで(proc_cntrlからtarget_tableを選択すると、Reprocess_Flag = 'N')。 –

答えて

1

単一のSELECT文では、すべての3つの列を使用してください。別のテーブル内のデータに基づいて一つのテーブルを更新する

UPDATE hdfs_cntrl SET active_flag = 'Y' 
where (source,subject_area ,source_table) in (select source,subject_area ,source_table from proc_cntrl where Reprocess_Flag = 'N'); 
0
merge into table1 t1 
using table2 t2 
on (t1.sorce=t2.source and t1.Subject_area = t2.Subject_area and t1.Source_table = t2.Source_table and t1.Target_table = t2.Target_table and t2.flag_status = 'N') 
when matched then update set 
t1.flag = 'Y'; 
1

はほとんど常に最高のMERGE文で行われています。 sourceを想定し

table2内で一意のキーです:

merge into table1 t1 
    using table2 t2 
    on (t1.source = t2.source) 
when matched 
    then update set t1.active_flag = 'Y' 
    where t2.reprocess_flag = 'N' 
; 

あなたはMERGE文に精通していない場合、それについて読んで - それは行うことができ、UPDATEとINSERTとして学び、削除するには、同じように簡単です単一のステートメント内の3つのタイプの操作はすべて、より柔軟で、場合によってはより効率的(高速)です。

0

UPDATE hdfs_cntrlセットのactive_flag = 'Y' ここで、ソース(proc_cntrlから選択ソースここReprocess_Flag = 'N')とsubject_areaとでSOURCE_TABLE(proc_cntrlからTARGET_TABLE選択(Reprocess_Flag = 'N' proc_cntrlからsubject_areaを選択)でReprocess_Flag = 'N')

関連する問題