Oracle
 sql >> база данни >  >> RDS >> Oracle

Защо тази заявка би причинила Merge Cartesian Join в Oracle

Проблемът е, че Oracle не знае, че get_fiscal_year_start_date (SYSDATE) връща един единствен резултат. Така че се предполага, че ще генерира много редове.

Очевидно нямам под ръка тестова програма, но тази версия на вашата заявка трябва да забрани декартово свързване на сливане.

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 знае, че DUAL има един ред и следователно подзаявката ще върне една стойност.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Четене на времеви клейма при импортиране на данни в SQL Developer

  2. Как да премахнете водещите нули от стойностите за ден и месец в Oracle, когато анализирате до низ с помощта на функцията to_char?

  3. Как да конвертирате формата на Oracle Date в Java?

  4. Преминете през предварително зададени стойности

  5. Изберете първите 150 реда, след това следващите 150 и така нататък?