选择错误:ORA-00918:列模糊定义

时间:2016-06-16 06:28:01

标签: sql oracle

我试图通过特定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

4 个答案:

答案 0 :(得分:2)

我认为您需要在BENEFICIARY_CIVIL_NUMBER子句中使用WHERE列的别名。我将假设此列属于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

答案 1 :(得分:1)

我的猜测是BENEFICIARY_CIVIL_NUMBERS_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?

答案 2 :(得分:0)

  

问题:我在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。 Oracle文档哪个   参考ORA-00918给出以下示例:          - 如果正在连接表EMP和DEPT并且都包含DEPTNO列,那么对DEPTNO的所有引用都应该以前缀为前缀   表名,如EMP.DEPTNO或E.DEPTNO。

     

要更正ORA-00918,引用应以列名称为前缀   存在于多个表中(使用表名或表别名)   和句号)source

因此,如果您使用前缀n.NAME_A, m.MOTHER_NAME_An定义m,则不必定义可能导致错误的BENEFICIARY_CIVIL_NUMBER

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

答案 3 :(得分:0)

以这种方式工作,感谢很多人

 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