【问题标题】:I am having this error ORA-00917: missing comma?我有这个错误 ORA-00917:缺少逗号?
【发布时间】:2020-04-02 21:41:37
【问题描述】:

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

【问题讨论】:

  • 我不认为asinsert 中列定义的一部分。
  • 好的,我确实编辑了帖子
  • 如前所述,NAME_ID AS 'NAME ID' 在插入语句的列列表中没有意义。此外,单引号用于字符串分隔符,因此如果您希望在其他查询中使用列别名,请记住使用双引号。

标签: sql oracle select sql-insert


【解决方案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);

【讨论】:

  • 谢谢,但仍然有同样的问题错误 SQL 错误:ORA-00918: column ambiguously defined
  • @Omar:请完全按照提供的方式运行查询。这不应引发该错误。
  • 谢谢,但还是同样的问题
【解决方案2】:

尝试不使用字段的别名,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;

【讨论】:

  • 谢谢,但仍然有同样的问题错误 SQL 错误:ORA-00918: column ambiguously defined
  • @Omar 你试过编辑过的代码吗?这应该工作得很好
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-07
相关资源
最近更新 更多