Jak zmieniłaby się moja wyjście, jeśli usuwam instrukcję istnieje z poniższego zapytania.


.

UPDATE AR_CRDT C
set (OPERATOR_ID,UPDT_TS) = ( SELECT AD.OPERATOR_ID,sysdate
                FROM
                (
                    Select A.*
                    FROM AR1_CUSTOMER_CREDIT A      
                 )AD 
                 WHERE AD.CREDIT_ID = C.CRDT_ID

                 )
where exists    ( SELECT 1
                FROM
                (
                    Select A.*
                    FROM AR1_CUSTOMER_CREDIT A          
                 )AD 
                  WHERE AD.CREDIT_ID = C.CRDT_ID
                 );
1
mac07 15 luty 2017, 15:26

2 odpowiedzi

Najlepsza odpowiedź

Jeśli usuniesz exists, a następnie OPERATOR_ID i UPDT_TS byłyby ustawione na NULL dla wierszy, w których warunki nie pasują.

Dlaczego napisałbyś to z dodatkowymi substancjami?

UPDATE AR_CRDT C
    SET (OPERATOR_ID, UPDT_TS) = (SELECT AD.OPERATOR_ID, sysdate
                                  FROM AR1_CUSTOMER_CREDIT A      
                                  WHERE A.CREDIT_ID = C.CRDT_ID
                                 )
    WHERE EXISTS (SELECT 1
                  FROM AR1_CUSTOMER_CREDIT A          
                  WHERE A.CREDIT_ID = C.CRDT_ID
                 );
2
Gordon Linoff 15 luty 2017, 12:27

Istnieje obecnie powodują ograniczenie aktualizacji AR_CRDT do tych rekordów, w których rekord AR_CRDT jest powiązany z rekordem AR1_Customer_credit.

Usunięcie tej klauzuli oznacza, że wszystkie rekordy AR_CRDT zostaną zaktualizowane. Niektóre będą miały wartości dla subtripera, a niektórzy będą null, gdzie nie ma połączenia między Arcrdt i AR1_Customer_credit.

2
BriteSponge 15 luty 2017, 12:36