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

Hvorfor skulle denne forespørgsel forårsage en Merge Cartesian Join i Oracle

Problemet er, at Oracle ikke kender den get_fiscal_year_start_date (SYSDATE) returnerer et enkelt resultat. Så det antager, at det vil generere mange rækker.

Det er klart, at jeg ikke har en testsele ved hånden, men denne version af din forespørgsel burde forvise den sammenflettede kartesiske join.

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 ved, at DUAL har en enkelt række, og derfor vil underforespørgslen returnere én værdi.




  1. MYSQL-forespørgsel efter SUM og DISTINCT?

  2. at vælge rækker med id fra en anden tabel

  3. mysql match/imod

  4. Oprettelse og Bridge-tabeller i MySQL-forespørgsel