2016-11-03 2 views
-2

Ich habe diese beiden Tabellen unten, ich muss Table1.Active_flag zu Y, wo Table2.Reprocess_Flag ist N zu aktualisieren.Update in Oracle mit Verbindung zweier Tabelle

Table1

+--------+--------------+--------------+--------------+-------------+ 
| 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   | 
+--------+--------------+--------------+--------------+-------------+ 

Table2

| 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

Ihre Frage ist nicht lesbar. – FDavidov

+0

Haben Sie etwas versucht? Stellen Sie den Code bitte – Aleksej

+0

UPDATE hdfs_cntrl SET active_flag = 'Y' wo Quelle in (select Quelle von proc_cntrl wo Reprocess_Flag = 'N') und subject_area in (wählen subject_area aus proc_cntrl wo Reprocess_Flag = 'N') und SOURCE_TABLE in (select target_table aus proc_cntrl where Reprocess_Flag = 'N'); –

Antwort

1

Verwenden alle drei Spalten in einer einzigen Select-Anweisung.

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

eine Tabelle auf Daten in einer anderen Tabelle basierte Aktualisierung ist fast immer am besten mit der MERGE-Anweisung erfolgen.

Unter der Annahme, source ist ein eindeutiger Schlüssel in 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' 
; 

Wenn Sie nicht vertraut mit der MERGE-Anweisung sind, lesen Sie es - es ist genauso einfach wie UPDATE zu lernen und einfügen und löschen, kann es tun Alle drei Arten von Operationen in einer einzigen Anweisung, ist es viel flexibler und in einigen Fällen effizienter (schneller).

0

UPDATE hdfs_cntrl SETS active_flag = 'Y', wobei Quelle in (select Quelle von proc_cntrl wo Reprocess_Flag = 'N') und subject_area in (select subject_area aus proc_cntrl wo Reprocess_Flag = 'N') und SOURCE_TABLE in (target_table von proc_cntrl wählen where Reprocess_Flag = 'N')