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

JOIN Проблем:Коригирайте SQL оператора за решаване:ORA-01799:колона може да не е външно свързана с подзаявка

Трябва да работи, ако превключите това на where клауза:

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
                                )

Вие обаче губите характеристиките „ляво външно съединение“, така че бихте искали също да добавите:or fx.ftf_validitystartdate is null . Предполагам, че v_CurrentDate идва от "p". Винаги е добра идея да използвате псевдоними на таблици преди имена на колони.

Питам се обаче дали подзаявката наистина е необходима. Необходим е само когато има повече от един запис, който отговаря на условията в подзаявката. В противен случай мисля, че можете просто да промените on клауза да бъде:

    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. Наследяване в дизайна на бази данни

  2. select distinct(date) връща една и съща дата няколко пъти

  3. PL/SQL извлича имената на колоните на оператора SELECT от потребителска заявка

  4. Обработка на нули при използване на Oracle XMLType

  5. Функция TRIM() в Oracle