-3

我正在努力将两个表中的数据插入到一个表中,但我收到此错误“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:
4

2 回答 2

1

考虑:

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);
于 2020-04-02T21:51:21.537 回答
0

尝试不使用字段的别名,也有一个双空格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;
于 2020-04-02T21:52:21.077 回答