У меня эта ошибка ORA-00917: пропущена запятая? - PullRequest
0 голосов
/ 03 апреля 2020

Я работаю над вставкой данных из двух таблиц в одну таблицу, но получаю эту ошибку "SQL Ошибка: ORA-00917: отсутствует запятая", но я не знаю, в чем проблема: любая помощь приветствуется, спасибо .

INSERT INTO NAME_PROFFESION(NAME_ID AS 'NAME ID' , PROFFESION_ID AS 'PROFFESIONID' )
SELECT NAME_ID, PROFFESION_ID 
FROM  NAME
INNER JOIN PROFFESION 
ON NAME.PROFFESION_ID = PROFFESION.PROFFESION_ID;

Ошибка:

Error starting at line : 107 in command -
 INSERT INTO NAME_PROFFESION(NAME_ID AS 'NAME ID' , PROFFESION_ID AS 'PROFFESIONID' )
 SELECT NAME_ID, PROFFESION_ID 
 FROM  NAME
 INNER JOIN PROFFESION 
 ON NAME.PROFFESION_ID = PROFFESION.PROFFESION_ID
 Error at Command Line : 107 Column : 37
 Error report -
 SQL Error: ORA-00917: missing comma
 00917. 00000 -  "missing comma"
 *Cause:    
 *Action:

И если я удалю AS, я получу эту ошибку:

  Error starting at line : 107 in command -
  INSERT INTO NAME_PROFFESION(NAME_ID , PROFFESION_ID )
  SELECT NAME_ID, PROFFESION_ID 
  FROM  NAME
  INNER JOIN PROFFESION 
  ON NAME.PROFFESION_ID = PROFFESION.PROFFESION_ID
  Error at Command Line : 108 Column : 17
  Error report -
 SQL Error: ORA-00918: column ambiguously defined
 00918. 00000 -  "column ambiguously defined"
 *Cause:    
*Action:

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Рассмотрим:

INSERT INTO NAME_PROFFESION(NAME_ID, PROFFESION_ID)
SELECT N.NAME_ID, N.PROFFESION_ID 
FROM NAME N
INNER JOIN PROFFESION P ON P.PROFFESION_ID = N.PROFFESION_ID;

То есть:

  • список столбцов INSERT не принимает псевдонимы, только имена столбцов

  • все столбцы должны определяться (с префиксом) с таблицей, к которой они принадлежат, чтобы избежать неоднозначности, когда один и тот же столбец доступен в более чем одной таблице - псевдонимы таблиц пригодятся для этого

Примечание: как бы то ни было, ваш запрос также может быть записан:

INSERT INTO NAME_PROFFESION(NAME_ID, PROFFESION_ID)
SELECT N.NAME_ID, N.PROFFESION_ID 
FROM NAME N
WHERE EXISTS (SELECT 1 FROM PROFFESION WHERE P.PROFFESION_ID = N.PROFFESION_ID);
0 голосов
/ 03 апреля 2020

Попробуйте без псевдонимов для полей, также есть двойной пробел в FROM NAME:

INSERT INTO NAME_PROFFESION(NAME_ID, PROFFESION_ID)
SELECT NAME_ID, PROFFESION_ID 
FROM NAME
INNER JOIN PROFFESION 
ON NAME.PROFFESION_ID = PROFFESION.PROFFESION_ID;

РЕДАКТИРОВАТЬ:

Неоднозначность заключается в том, что нет псевдонимов для таблиц , Итак, попробуйте:

INSERT INTO NAME_PROFFESION(NAME_ID, PROFFESION_ID)
SELECT n.NAME_ID, n.PROFFESION_ID 
FROM NAME n
INNER JOIN PROFFESION p
ON n.PROFFESION_ID = p.PROFFESION_ID;
...