首页 > 解决方案 > 加入后的标识符无效

问题描述

谁能解释为什么我收到以下错误消息:

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  

标签: sqljoin

解决方案


问题出在子查询上SELECT *

有两个列名ptl.oba_req_fkttl.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 *Please selectthe column 你需要这样可以提高性能
  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

推荐阅读