Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Warum würde diese Abfrage einen Merge Cartesian Join in Oracle verursachen?

Das Problem ist, dass Oracle dieses get_fiscal_year_start_date (SYSDATE) nicht kennt gibt ein einziges Ergebnis zurück. Es wird also davon ausgegangen, dass viele Zeilen generiert werden.

Offensichtlich habe ich keine Testumgebung zur Hand, aber diese Version Ihrer Abfrage sollte den kartesischen Merge-Join verbannen.

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 weiß, dass DUAL eine einzelne Zeile hat und daher die Unterabfrage einen Wert zurückgibt.