[英]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_V
和S_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,应在多个表(存在表名或表别名和句点) 源中存在的列名之前添加引用
因此,如果您以n
或m
为前缀定义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.