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

JOIN Problem:Popraw instrukcję SQL do rozwiązania:ORA-01799:kolumna nie może być połączona z podzapytaniem

Powinno działać, jeśli przełączysz to na where klauzula:

select *
from acc_accounts acc join
     kp_paramcore p
     on acc.account_no = p.accountnum and
        acc.suffix = p.suffixc LEFT JOIN
     ftf_rates fx
     ON p.maturestart = fx.ftf_vadealtsinir and
        p.maturefinish = fx.ftf_vadeustsinir and
        fx.statusrec = 'A' and
        fx.currencycode = acc.currencsw_kod and
        fx.status= 'A'
 where fx.ftf_validitystartdate= (SELECT MAX(ff.ftf_validitystartdate)
                                 FROM ftf_rates ff
                                 WHERE ff.status = 'A' and
                                       ff.statusrec = 'A'
                                       p.v_CurrentDate BETWEEN ff.systemstartdate AND ff.systemfinishdate                                            AND ff.currencycode = acc.currencsw_kod
                                )

Jednak tracisz charakterystykę „lewego sprzężenia zewnętrznego”, więc warto również dodać:or fx.ftf_validitystartdate is null . Domyślam się, że v_CurrentDate pochodzi od „p”. Zawsze dobrze jest używać aliasów tabel przed nazwami kolumn.

Mam jednak wątpliwości, czy podzapytanie jest naprawdę potrzebne. Jest potrzebny tylko wtedy, gdy istnieje więcej niż jeden rekord spełniający warunki w podzapytaniu. W przeciwnym razie myślę, że możesz po prostu zmienić on klauzula:

    ON p.maturestart = fx.ftf_vadealtsinir and
       p.maturefinish = fx.ftf_vadeustsinir and
       fx.statusrec = 'A' and
       fx.currencycode = acc.currencsw_kod and
       fx.status= 'A'and
       p.v_CurrentDate BETWEEN fx.systemstartdate AND fx.systemfinishdate


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle 11g SQL, aby uzyskać unikalne wartości w jednej kolumnie wielokolumnowego zapytania

  2. różnica sydat

  3. Czy możesz WYBRAĆ wszystko oprócz 1 lub 2 pól, bez skurczu pisarza?

  4. Poddźwiękowe wsparcie dla Oracle ODP.NET?

  5. Oblicz sumę czasu trwania w zapytaniu sql