Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pourquoi cette requête provoquerait-elle une jointure cartésienne de fusion dans Oracle

Le problème est qu'Oracle ne sait pas que get_fiscal_year_start_date (SYSDATE) renvoie un seul résultat. Il suppose donc qu'il générera beaucoup de lignes.

Évidemment, je n'ai pas de harnais de test à portée de main, mais cette version de votre requête devrait bannir la jointure cartésienne de fusion.

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 sait que DUAL a une seule ligne, et donc que la sous-requête renverra une valeur.