Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego to zapytanie spowodowałoby scalanie kartezjańskie w Oracle?

Problem polega na tym, że Oracle nie wie, że get_fiscal_year_start_date (SYSDATE) zwraca jeden wynik. Zakłada więc, że wygeneruje wiele wierszy.

Oczywiście nie mam pod ręką uprzęży testowej, ale ta wersja twojego zapytania powinna wyeliminować połączenie kartezjańskie scalające.

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 wie, że DUAL ma jeden wiersz, a zatem podzapytanie zwróci jedną wartość.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obejście dla ORA-00997:nielegalne użycie typu danych LONG

  2. Określić, czy data Oracle jest w weekend?

  3. Strategia poprawy wydajności Oracle DELETE

  4. Dlaczego otrzymuję za mało wartości podczas uruchamiania INSERT?

  5. ORA-04076:nieprawidłowa NOWOŚĆ lub STARA specyfikacja - PL/SQL - Wyzwalacz Oracle