2016-06-16 2 views
0

Я пытаюсь получить некоторые данные из 2-синонимов специфических BENEFICIARY_CIVIL_NUMBER, но я получаю сообщение об ошибкеВыберите ошибку: ORA-00918: колонка двусмысленно определено

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

Можете ли вы поделиться структуры таблиц, пожалуйста? – Mureinik

+0

его защищенные синонимы, которые я не вижу, его структуры – ghalib

+3

[Плохие привычки пинать: использование старинного стиля JOINs] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick -using-old-style-joins.aspx) - стиль старого стиля * разделенный запятыми список таблиц * был заменен на * правильный * ANSI 'JOIN' синтаксис в ANSI - ** 92 ** SQL Standard (* * более 20 лет ** назад), и его использование не рекомендуется –

ответ

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

Я думаю, вам нужно использовать псевдоним с 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 
0

Question: I am getting an ORA-00918 error on my SQL select statement that joins two tables. How do I correct this ORA-00918 error?
Answer: The Oracle docs note this on the ora-00918 error::\ ORA-00918 column ambiguously defined

Cause: A column name used in a join exists in more than one table and is thus referenced ambiguously. In a join, any column name that occurs in more than one of the tables must be prefixed by its table name when referenced. The column should be referenced as TABLE.COLUMN or TABLE_ALIAS.COLUMN. For example, if tables EMP and DEPT are being joined and both contain the column DEPTNO, then all references to DEPTNO should be prefixed with the table name, as in EMP.DEPTNO or E.DEPTNO.

Action: Prefix references to column names that exist in multiple tables with either the table name or a table alias and a period (.), as in the examples above.

When ORA-00918 is thrown, you have a column which has been ambiguously defined. If a column name in a join is referenced ambiguously, it exists in multiple tables.

Column names which occur in multiple tables should be prefixed when it is referenced by its table name. Columns must be referenced as TABLE.COLUMN or TABLE_ALIAS.COLUM . Oracle documentation which reference ORA-00918 give the following example: - If tables EMP and DEPT are being joined and both contain the column DEPTNO, then all references to DEPTNO should be prefixed with the table name, as in EMP.DEPTNO or E.DEPTNO.

To correct ORA-00918, references should be prefixed to column names existing in multiple tables (either with the table name or table alias and a period) source

Итак, Тхо вы определяете n.NAME_A, m.MOTHER_NAME_A с префиксом n или m, вы не определяете BENEFICIARY_CIVIL_NUMBER, который, вероятно, вызывает ошибку.

Чтобы исправить это, добавьте префикс к BENEFICIARY_CIVIL_NUMBER!

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 
+1

Это было бы необязательно; вы уже присоединились к таблицам, используя 'BENEFICIARY_CIVIL_NUMBER', поэтому в предложении' WHERE' вам просто нужно указать его один раз ... – cipley

Смежные вопросы