使用Oracle Merge语句对列进行模糊定义的错误

时间:2015-06-15 13:14:32

标签: sql oracle

我在Oracle SQL中遇到此查询的问题。

  

Errore alla riga del comando:18 Colonna:42
  报告错误:
  Errore 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;

1 个答案:

答案 0 :(得分:5)

您已在选择列表中选择了两次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

所以你可以摆脱其他列,因为它们与合并无关。