繁体   English   中英

选择错误:ORA-00918:列定义不明确

[英]Select error : ORA-00918: column ambiguously defined

我正在尝试通过特定的BENEFICIARY_CIVIL_NUMBER从2个同义词获取一些数据,但出现错误

SELECT n.NAME_A, m.MOTHER_NAME_A
FROM S_S_CSPF_NRS_PERSON_V N, S_S_CSPF_NRS_MOTHER_V  M
WHERE BENEFICIARY_CIVIL_NUMBER = 1111111

我认为您需要在WHERE子句中的BENEFICIARY_CIVIL_NUMBER列中使用别名。 我将假定此列属于S_S_CSPF_NRS_PERSON_V表,因此查询应为:

SELECT n.NAME_A, m.MOTHER_NAME_A
FROM S_S_CSPF_NRS_PERSON_V n, S_S_CSPF_NRS_MOTHER_V m
WHERE n.BENEFICIARY_CIVIL_NUMBER = 1111111

您当前正在两个表之间进行交叉联接。 如果这是您想要的,请保持原样。 如果您打算使用INNER JOIN ,那么为什么不做明确说明:

SELECT n.NAME_A, m.MOTHER_NAME_A
FROM S_S_CSPF_NRS_PERSON_V n
INNER JOIN S_S_CSPF_NRS_MOTHER_V m
    ON n.col1 = m.col2
WHERE n.BENEFICIARY_CIVIL_NUMBER = 1111111

我的猜测是BENEFICIARY_CIVIL_NUMBER列同时存在于S_S_CSPF_NRS_PERSON_VS_S_CSPF_NRS_MOTHER_V

您也需要指定它。 要么:

where n.BENEFICIARY_CIVIL_NUMBER = 1111111

要么:

where m.BENEFICIARY_CIVIL_NUMBER = 1111111

此外,什么是BENEFICIARY_CIVIL_NUMBER数据类型? VARCHAR?

问题:在连接两个表的SQL select语句上出现ORA-00918错误。 如何更正此ORA-00918错误?
答案:Oracle文档在ora-00918错误:: \\ ORA-00918列上定义不明确

原因:连接中使用的列名存在于多个表中,因此被不明确地引用。 在联接中,在多个表中出现的任何列名都必须在引用时为其表名加上前缀。 该列应引用为TABLE.COLUMN或TABLE_ALIAS.COLUMN。 例如,如果要联接表EMP和DEPT并且都包含列DEPTNO,则对DEPTNO的所有引用都应以表名作为前缀,如EMP.DEPTNO或E.DEPTNO。

行动:前缀引用存在于多个表中的列名,具有表名或表别名以及句点(。),如上例所示。

引发ORA-00918时,您具有一列的定义不明确。 如果联接中的列名被不明确地引用,则它存在于多个表中。

当多个表中出现的列名由其表名引用时,应加上前缀。 列必须引用为TABLE.COLUMN或TABLE_ALIAS.COLUM。 引用ORA-00918的Oracle文档给出了以下示例:-如果表EMP和DEPT被联接并且都包含DEPTNO列,则所有对DEPTNO的引用都应以表名作为前缀,如EMP.DEPTNO或E.DEPTNO 。

要更正ORA-00918,应在多个表(存在表名或表别名和句点) 源中存在的列名之前添加引用

因此,如果您以nm为前缀定义n.NAME_A, m.MOTHER_NAME_A ,则不会定义BENEFICIARY_CIVIL_NUMBER ,这可能会导致错误。

要解决此问题,请在BENEFICIARY_CIVIL_NUMBER添加前缀!

它的工作方式非常感谢很多人

 select n.NAME_A ,m.MOTHER_NAME_A from S_S_CSPF_NRS_PERSON_V n
     ,S_S_CSPF_NRS_MOTHER_V m  
where n.BENEFICIARY_CIVIL_NUMBER = 111111
     and M.BENEFICIARY_CIVIL_NUMBER= 1111111

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM