Sql 我得到了ORA-00904“;无效标识符";在左联接中使用合法列名时

Sql 我得到了ORA-00904“;无效标识符";在左联接中使用合法列名时,sql,oracle,join,ora-00904,Sql,Oracle,Join,Ora 00904,当我在左联接中使用合法列名时,我得到ORA-00904“无效标识符”,但如果我在试图限制的表上使用标准(内部)联接,则在where子句中使用相同的标识符(我复制并粘贴了该标识符)时,我不会得到错误 例1: Select NAMES.R_NAME From CMPLN, NAMES Where CMPLN.CMPLN_ID = NAMES.CMPLN_ID 工作 例2: Select NAMES.R_NAME From CMPLN L

当我在左联接中使用合法列名时,我得到ORA-00904“无效标识符”,但如果我在试图限制的表上使用标准(内部)联接,则在where子句中使用相同的标识符(我复制并粘贴了该标识符)时,我不会得到错误

例1:

Select NAMES.R_NAME 
        From CMPLN, NAMES 
        Where CMPLN.CMPLN_ID = NAMES.CMPLN_ID
工作

例2:

 Select NAMES.R_NAME
      From CMPLN
      Left Join NAMES On CMPLN.CMPLN_ID = NAMES.CMPLN_ID 
获取一个错误

“ORA-00904:“CMPLN”。“CMPLN\U ID”:无效标识符

我正在使用Oracle

(来自提问者2015年7月29日12:40发布的答案,该答案本应为编辑:)

我没有正确显示代码,因此答案不明显。
我在CMPLN和join之间的From子句中插入了另一个表,如下所示:

Select NAMES.R_NAME
From CMPLN, RSPN
Left Join NAMES On CMPLN.CMPLN_ID = NAMES.CMPLN_ID  
这就是导致错误的原因


(在Informix SQL中,我习惯于这样做,但在Oracle中不起作用。)

我有一个类似的问题:
ORA-00904:“TTR”。“PARENT\u CNTL\u NBR”:无效的标识符,如下所示:

SELECT *
FROM TTR,
  TST
LEFT JOIN ITF
ON NVL(TRIM(TST.CLIENT_USE_TXT), TRIM(SUBSTR(TTR.PARENT_CNTL_NBR, 1, 22))) = NVL(TRIM(ITF.CLIENT_USE_TXT), TRIM(SUBSTR(ITF.TRANSACTION_NO, 1, 22)))
WHERE TST.SECURITY_ADP_NBR                                                 = TTR.SECURITY_ADP_NBR
我通过使用
join
子句而不是
where
语句完成所有连接来修复它:

SELECT *
FROM TTR
INNER JOIN TST
ON TST.SECURITY_ADP_NBR = TTR.SECURITY_ADP_NBR
LEFT JOIN ITF
ON NVL(TRIM(TST.CLIENT_USE_TXT), TRIM(SUBSTR(TTR.PARENT_CNTL_NBR, 1, 22))) = NVL(TRIM(ITF.CLIENT_USE_TXT), TRIM(SUBSTR(ITF.TRANSACTION_NO, 1, 22)))

您能在sql FIDLE中重现此错误吗?您使用的是哪个Oracle版本?Oracle 9和10在使用显式连接时确实存在一些错误,尤其是在内部视图或物化视图中使用时。这可能是您使用的Oracle版本中的一些错误。请使用显式别名,然后尝试从CMPLN中选择N.R_名称C.CMPLN_ID=N.CMPLN_ID
上的左外部联接名称N在SQLFIDLE中的Oracle 11g R2中似乎可以正常工作:请在代码问题中给出一个--cut&paste&runnable代码加上所需的输出加上清晰的说明和解释。Minimal意味着将最小问题代码添加到最小工作代码中。因此,给出最小代码,您所展示的是什么您希望在出现错误的第一个位置使用最少的代码(&M)。(调试基础)