sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué esta consulta causaría una unión cartesiana de fusión en Oracle?

El problema es que Oracle no sabe que get_fiscal_year_start_date (SYSDATE) devuelve un único resultado. Entonces, se supone que generará muchas filas.

Obviamente, no tengo un arnés de prueba a mano, pero esta versión de su consulta debería desterrar la unión cartesiana de fusión.

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 ) 

Oracle sabe que DUAL tiene una sola fila y, por lo tanto, la subconsulta devolverá un valor.