Artur
G.
Manager / Management
3.0 enthusiast
Temat: Mały problem z update'em tabelki
Witam,Mam niby dość banalne zadanie, ale trochę się przy nim zaciąłem.
Mam 2 tabelki tabelkaA i tabelkaB. Obie o identycznej definicji (klucz główny każdej z nich to contract_part_id), natomiast różnych danych.
Załóżmy, że pierwsza z nich ma 100tys. rekordów, a druga 50 tys. rekordów. Jednocześnie wszystkie contract_part_id tabelki B są pozdbiorem contract_part_id tabelki A.
To co chcę zrobić, to update'ować sobie wartości niektórych kolumn w tabelceA wartościami z tabelkiB dla tych rekordów tabelkiA, które mają swoje odpowiedniki w tabelceB. Pozostałe rekordy tabelki A pozostają takie jak były.
Napisałem na szybko następującego SQL'a:
update tabelkaA a
set (a.FTP1_PURE_RATE, a.FTP2_RATE, a.FTP_LIQ_SPRD, a.FTP_I_S_SPRD, a.FTP_TRY_SPRD, a.FTP_B_M_SPRD) = (select b.FTP1_PURE_RATE, b.FTP2_RATE, b.FTP_LIQ_SPRD, b.FTP_I_S_SPRD, b.FTP_TRY_SPRD, b.FTP_B_M_SPRD from tabelkaB b where a.contract_part_id =b.contract_part_id);
No i niestety wpadka.
Wprawdzie dla tych rekordów których contract_part_id występowało zarówno w tabelce A jak i B zrobił update poprawnie, jednak jeśli były jakieś rekordy w tabelceA, dla których nie było odpowiedników w tabelce B, to zamiast zostawić je nietknięte update'ował je null'ami :-(
Czy ktoś ma pomysł jak zmodyfikować zapytanie aby updatował tylko te 50 tys. rekordów które powinien?
Zależy mi też by było to rozwiązanie optymalne, gdyż szybkość działania jest tu sprawą kluczową.
Z góry dzięki!
P.S. Zapomniałem dodać że chodzi o SQL'a w wersji Oracle'owej Artur G. edytował(a) ten post dnia 19.04.11 o godzinie 20:39