Oracle
 sql >> Database >  >> RDS >> Oracle

Strano comportamento del full outer join in Oracle:come potrebbe essere spiegato?

L'ottimizzatore non dovrebbe scegliere di utilizzare l'indice su EMP.DEPT_ID nella seconda query, poiché può avere valori NULL. Questo è ciò che causa l'esclusione di una riga dai risultati.

L'unica spiegazione non di bug a cui posso pensare al momento è che hai in qualche modo creato vincoli in modalità DISABLE RELY in modo che l'ottimizzatore pensi che il campo non possa contenere NULL. In questo caso sarebbe corretto utilizzare l'indice date le informazioni errate nei vincoli. Tuttavia, sembra che l'opzione RELY non sia disponibile per i vincoli NOT NULL, quindi non vedo come questo possa essere il problema. Tuttavia, dai un'occhiata a tutti i vincoli sui tavoli.

A parte questo, sul sito di Oracle è presente un numero sorprendente di bug relativi a risultati errati da join esterni completi. Potresti colpire uno di loro. In molti di questi casi, la soluzione alternativa è disabilitare i full outer join "nativi", cosa che puoi fare per la tua sessione corrente con questa istruzione:

alter session set "_optimizer_native_full_outer_join"=off;