【问题标题】:Column ambiguously defined error with Oracle Merge statementOracle Merge 语句的列不明确定义错误
【发布时间】:2015-06-15 13:14:31
【问题描述】:

我在 Oracle SQL 中遇到了这个查询的问题。

Errore alla riga del comando:18 Colonna:42
报告错误:
错误 SQL:ORA-00918:列定义不明确
00918. 00000 - “列定义不明确”
*原因:
*行动:

这是查询,但我没有看到定义不明确的列:

MERGE INTO T_HPSM_CM_UBIS H USING
(SELECT A.itam_relevant_appl_code as ret,
 b.service_id,
 b.it_service,
 b.itam_user_id,
 b.itam_last_name,
 b.itam_first_name,
 b.itrm_user_id,
 b.itam_first_name,
 b.itam_last_name
FROM
 (SELECT f.itam_relevant_appl_code
  FROM T_HPSM_CM_UBIS f
  GROUP BY f.itam_relevant_appl_code
 ) A,
 t_cp_list_itam b
 WHERE A.itam_relevant_appl_code   = b.hvb_appl_code
) s ON (H.itam_relevant_appl_code = s.ret)
WHEN MATCHED THEN
UPDATE SET   H.service_id = s.service_id, H.it_service = s.it_service;

【问题讨论】:

  • 我认为问题出在“s.ret”上,您的 MERGE 语句的第二行还有一个“ret”作为别名
  • 也许尝试在 A 和 t_cp_list_itam b 之间写一个 JOIN 语句
  • 为什么列b.itam_last_nameb.itam_first_name 选择了两次同名?

标签: sql oracle


【解决方案1】:

您在选择列表中选择了 b.itam_first_name 和 b.itam_last_name 两次。你是故意的吗?最后两个应该有 itrm 而不是 itam 吗?

SELECT A.itam_relevant_appl_code as ret,
 b.service_id,
 b.it_service,
 b.itam_user_id,
 b.itam_last_name, -- 1st occurrence
 b.itam_first_name,  -- 1st occurrence
 b.itrm_user_id,
 b.itam_first_name, -- 2nd occurrence
 b.itam_last_name -- 2nd occurrence
FROM ...

如果这不是错误,则必须为该列的第二次出现提供一个别名,以允许 Oracle 区分两者。

ETA:更仔细地查看您的查询,您实际上只使用了源查询中的 3 列:

  • a.itam_relevant_appl_code
  • b.service_id
  • b.it_service

因此您可以删除其他列,因为它们与合并无关。

【讨论】:

  • 如果结果集中的多个列具有相同的名称,即使它们来自不同的表,也会出现同样的错误。
猜你喜欢
  • 2013-12-13
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多