Почему при создании таблицы отображается ORA-00957: повторяющееся имя столбца - PullRequest
0 голосов
/ 03 октября 2018

Кто-нибудь знает, почему этот оператор select в этом запросе работает нормально, но когда я добавляю cte перед тем же оператором select, он выдает эту ошибку:

Ошибка SQL: ORA-00957:повторяющееся имя столбца)

CREATE TABLE t1 AS 
SELECT * 
 FROM NS_F3 
 LEFT JOIN NS_FA2 
 ON NS_F3.PI_CANDIDATE_NUM = NS_FA2.PI_CANDIDATE_NUM 
 WHERE REGEXP_LIKE(NS_F3.TITLE, 'intern($|ship|[^a-z])', 'i');

1 Ответ

0 голосов
/ 03 октября 2018

Это потому, что таблицы NS_F3 и NS_FA2 содержат столбцы с одинаковыми именами - в этом случае вы должны использовать столбец псевдоним , чтобы избежать дублирования имен столбцов.

Вотпример: я создаю простую таблицу, как извлечение нескольких столбцов из таблицы Скотта EMP:

SQL> create table t_first as select deptno, empno, ename from emp where rownum < 5;

Table created.

Присоединение к DEPT таблице:

SQL> select * from t_first e join dept d on e.deptno = d.deptno;

    DEPTNO      EMPNO ENAME          DEPTNO DNAME          LOC
---------- ---------- ---------- ---------- -------------- -------------
        20       7369 SMITH              20 RESEARCH       DALLAS
        20       7566 JONES              20 RESEARCH       DALLAS
        30       7521 WARD               30 SALES          CHICAGO
        30       7499 ALLEN              30 SALES          CHICAGO
 ^^^^^^^^^                         ^^^^^^^^
 this is DEPTNO column ...         ... and here's another one

Пока он работает в SELECT, он не будет работать в CREATE TABLE:

SQL> create table test as
  2  select * from t_first e join dept d on e.deptno = d.deptno;
select * from t_first e join dept d on e.deptno = d.deptno
       *
ERROR at line 2:
ORA-00957: duplicate column name

Решение состоит в использовании псевдонима столбца, например:

SQL> create table test as
  2  select e.deptno emp_deptno,  --> first alias
  3    e.empno,
  4    e.ename,
  5    d.deptno,     dept_deptno  --> second alias
  6    d.dname,
  7    d.loc
  8  from t_first e join dept d on e.deptno = d.deptno;

Table created.

SQL> select * From test;

EMP_DEPTNO      EMPNO ENAME      DEPT_DEPTNO DNAME          LOC
---------- ---------- ---------- ----------- -------------- -------------
        20       7369 SMITH               20 RESEARCH       DALLAS
        20       7566 JONES               20 RESEARCH       DALLAS
        30       7521 WARD                30 SALES          CHICAGO
        30       7499 ALLEN               30 SALES          CHICAGO

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...