Instrukcja MERGE
umożliwia aktualizację i dołączenie wierszy z jednej tabeli do drugiej.
Możemy na przykład złączyć z tabelą customer
zmiany wprowadzone w klientach w innej tabeli. Aby dobrze zobrazować
działanie instrukcji MERGE należy
utworzyć nową tabelę customer_changes. Czynność
tą realizuje poniższa instrukcja:
Poniższe zapytanie pobiera z tabeli customer_changes kolumny cust_no, customer i city:
Dla porównania poniższe zapytanie pobiera z tabeli customer kolumny cust_no, customer i city:
Załóżmy, że chcemy scalić wiersze z tabeli customer_changes z tabelą customer zgodnie z poniższymi regułami:
- W przypadku wierszy z takimi samymi wartościami cust_no w obu tabelach do istniejących wierszy tabeli customer. Na przykład w tabeli customer_changes miasto klienta numer 1009 jest inne niż w tabeli customer, dlatego też miasto tego klienta musi zostać zmienione w tabeli customer. Klient numer 1010 ma inną nazwę i cenę, więc w tabeli customer muszą zostać zmienione obydwie wartości.
- Wiersze występujące tylko w tabeli customer_changes powinny zostać wstawione do tabeli customer. Klienci nr 1017 i 1018 występują tylko w tabeli customer_changes, muszą więc zostać wstawione do tabeli customer.
Instrukcję MERGE
najłatwiej zrozumieć analizując przykład (poniższy wykonuje scalanie
zgodnie z przedstawioną listą reguł):
W instrukcji MERGE
są następujące części:
- Klauzula INTO określa nazwę tabeli, z którą będą scalane wiersze. W przykładzie jest to tabela customer, której nadano alias c.
- Klauzula USING … ON określa złączenie tabeli. W przykładzie złączenie jest dokonywane przez kolumny cust_no tabel customer i customer_changes. Tabeli . Tabeli customer_changes nadano alias cc.
- Klauzula WHEN MATCHED THEN określa czynność wykonywaną, gdy wiersz spełnia klauzulę USING … ON. W przykładzie czynnością jest instrukcja UPDATE, która przypisuje wartościom kolumn customer i city wiersza istniejącego w tabeli customer wartości odpowiedniego wiersza tabeli customer_changes.
- Klauzula WHEN NOT MATCHED THEN określa czynność wykonywaną, gdy wiersz nie spełnia klauzuli USING … ON. W przykładzie czynnością jest instrukcja INSERT, która wstawia wiersz do tabeli customer, pobierając wartości kolumn z wiersza z tabeli customer_changes.
Po uruchomieniu przedstawionej instrukcji MERGE widzimy, że zostały scalone cztery
wiesze. Są to wiesze, w których cust_no ma
wartość 1009, 1010, 1017 i 1018. Poniższe
zapytanie pobiera z tabeli customer cztery
scalone wiersze:
W tych wiersza zostały wprowadzone następujące zmiany:
- klient numer 1009 ma nowe miasto
- klient numer 1010 ma nową nazwę oraz miasto
- klienci numer 1017 i 1018 zostali dodani do tabeli
Brak komentarzy:
Prześlij komentarz