我试图通过特定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
答案 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_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?
答案 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_A
或n
定义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