jaki rodzaj sprzężenia jest wykonywany? Myślę, że to pełne sprzężenie zewnętrzne, prawda?
Nie, to zwykłe sprzężenie zewnętrzne. Zapytanie musi wiedzieć, kiedy w tabeli docelowej znajdują się wiersze, które również znajdują się w tabeli źródłowej, a kiedy w tabeli źródłowej znajdują się rekordy, których nie ma w tabeli docelowej. Ponieważ zapytanie nie musi odpowiadać na wiersze, które znajdują się w tabeli docelowej, ale których nie ma w tabeli źródłowej, nie wymaga sprzężenia zewnętrznego, aby działać w obie strony.
Jednak zewnętrzne sprzężenie nie zostanie wykonane, jeśli nie ma not matched
klauzula (która jest całkowicie poprawna). Optymalizator jest na tyle sprytny, że wie, że w takim przypadku wystarczy sprzężenie wewnętrzne.
w odniesieniu do części KIEDY DOPASOWANE:co się dzieje, gdy wiersz z t pasuje do wielu wierszy z s?
Gdy jest wiele dopasowań, aktualizacja jest wykonywana dla każdego dopasowania. Oznacza to, że ostatnia aktualizacja zostanie zapisana w zatwierdzeniu. Nie ma możliwości dyktowania kolejności, więc w tym przypadku źródło aktualizacji jest faktycznie losowe (z zestawu dopasowań).
Jak zauważył @ Vincent Malgrat, było to nieprawidłowe. Wygląda na to, że Oracle wygeneruje błąd „ORA-40926:nie można uzyskać stabilnego zestawu wierszy w tabeli źródłowej”, jeśli istnieje wiele dopasowań.
w odniesieniu do części KIEDY NIE DOPASOWANO, jak sądzę, oznacza to „kiedy wiersz w s nie ma korespondencji w t”. Czy mam rację?
Zgadza się.