Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que essa consulta causaria uma junção cartesiana de mesclagem no Oracle


O problema é que a Oracle não sabe que get_fiscal_year_start_date (SYSDATE) retorna um único resultado. Portanto, supõe-se que ele gerará muitas linhas.

Obviamente, não tenho um equipamento de teste disponível, mas esta versão da sua consulta deve banir a junção cartesiana de mesclagem.
SELECT RTRIM (position) AS "POSITION", 
.  // Other fields 
. 
. 
FROM schema.table x 
     , ( select get_fiscal_year_start_date (SYSDATE) as fiscal_year 
         from dual ) fy
WHERE hours > 0  
AND pay = 'RGW' 
AND NOT EXISTS( SELECT position 
                FROM  schema.table2 y 
                where y.date = fy.fiscal_year
                AND y.position = x.position ) 

O Oracle sabe que DUAL tem uma única linha e, portanto, a subconsulta retornará um valor.