sql >> Database >  >> RDS >> Oracle

Waarom zou deze query een Merge Cartesian Join in Oracle veroorzaken?

Het probleem is dat Oracle niet weet dat get_fiscal_year_start_date (SYSDATE) geeft één resultaat terug. Dus het gaat ervan uit dat het veel rijen zal genereren.

Uiteraard heb ik geen testharnas bij de hand, maar deze versie van uw zoekopdracht zou de cartesiaanse samenvoeging moeten uitbannen.

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 weet dat DUAL één rij heeft, en daarom zal de subquery één waarde teruggeven.




  1. Groepen van opeenvolgende dagen maken die aan bepaalde criteria voldoen

  2. Lege parameterlijst IN-clausule in MySQL

  3. PostgreSQL:vul NULL-waarden in timeserie-query met vorige waarde

  4. PDO kan geen externe mysql-server verbinden