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

Perché questa query dovrebbe causare un join cartesiano Merge in Oracle

Il problema è che Oracle non sa che get_fiscal_year_start_date (SYSDATE) restituisce un unico risultato. Quindi si presume che genererà molte righe.

Ovviamente non ho un cablaggio di prova a portata di mano, ma questa versione della tua query dovrebbe bandire il join cartesiano di unione.

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 sa che DUAL ha una singola riga e quindi che la sottoquery restituirà un valore.