неверный идентификатор после объединения - PullRequest
0 голосов
/ 03 мая 2018

Может кто-нибудь объяснить, почему я получаю сообщение об ошибке ниже:

ORA-00904: "BPT". "OBA_REQ_FK": неверный идентификатор

sql работает так, как должен, пока я не помещу его в мое объединение.

left outer join (Select *
From (SELECT OBA_REQ_FK, Max(CRE_DATE) AS CRE_DATE
FROM fmis.open_burn_requests_pt
GROUP BY OBA_REQ_FK) ptl
join 
(SELECT OBA_REQ_FK, USNG_COORDS,CRE_DATE
FROM fmis.open_burn_requests_pt) ttl
on ttl.CRE_DATE = ptl.CRE_DATE) bpt on bpt.oba_req_fk = oba.pk  

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

ОК, это то, что я сделал, и теперь похоже, что оно работает:

left outer join (Select *
From (SELECT OBA_REQ_FK, Max(CRE_DATE) AS CRE_DATE
FROM fmis.open_burn_requests_pt
GROUP BY OBA_REQ_FK) ptl
join 
(SELECT OBA_REQ_FK as OBAREQFK, USNG_COORDS,CRE_DATE
FROM fmis.open_burn_requests_pt) ttl
on ttl.CRE_DATE = ptl.CRE_DATE) bpt on bpt.oba_req_fk = oba.pk  
0 голосов
/ 03 мая 2018

Проблема в подзапросе SELECT *.

В подзапросе есть два имени столбца ptl.oba_req_fk и ttl.oba_req_fk, внешний ON не знает, какой использовать

Вам нужно определить, какой вам нужен.

LEFT OUTER JOIN 
( 
       SELECT  -- * ptl.oba_req_fk,ttl.oba_req_fk
       FROM   ( 
                       SELECT   oba_req_fk, 
                                max(cre_date) AS cre_date 
                       FROM     fmis.open_burn_requests_pt 
                       GROUP BY oba_req_fk) ptl 
       JOIN 
              ( 
                     SELECT oba_req_fk, 
                            usng_coords, 
                            cre_date 
                     FROM   fmis.open_burn_requests_pt) ttl 
       ON     ttl.cre_date = ptl.cre_date
) bpt ON bpt.oba_req_fk = oba.pk

Примечание:

  1. Избегайте использования select * Пожалуйста, select столбец, который вам нужен Это может улучшить производительность
  2. Если вы хотите выбрать одинаковое имя столбца в таблицах, вы можете использовать псевдоним.

Редактировать

Полагаю, вам нужно получить ptl.oba_req_fk, потому что вы хотите получить данные о последней дате.

LEFT OUTER JOIN 
( 
       SELECT  ptl.oba_req_fk,
               ptl.cre_date,
               ttl.usng_coords
       FROM   ( 
                       SELECT   oba_req_fk, 
                                max(cre_date) AS cre_date 
                       FROM     fmis.open_burn_requests_pt 
                       GROUP BY oba_req_fk) ptl 
       JOIN 
              ( 
                     SELECT oba_req_fk, 
                            usng_coords, 
                            cre_date 
                     FROM   fmis.open_burn_requests_pt) ttl 
       ON     ttl.cre_date = ptl.cre_date
) bpt ON bpt.oba_req_fk = oba.pk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...