我需要迁移带有一些查询的一系列脚本,这些查询在多个表上执行大量联接,以获取注册表的值。
不幸的是,由于出现sql错误,我无法处理这些查询:
SQL0203N对“ INDEX_NOREL”列的引用是不明确的。
使用的数据库是IBM DB2,令我困惑的是客户端确认查询应该可以工作。
有人知道如何修改此查询以使其正常工作吗?
我正在做一些测试,但是我不知道DB2,而且我对SQL也不是很有经验。 我知道该列是模棱两可的(在每个表中都有相同的名称),但是如果我尝试重命名该列,则会得到上下文错误的错误...
以下是查询:
SELECT
(CASE WHEN A.INDEX_FATT = 0 THEN A.INDEX_CL ELSE COALESCE(B.INDEX_CL, 0) END) AS INDCLI,
(CASE WHEN A.INDEX_FATT = 0 THEN A.INDEX_AP ELSE COALESCE(B.INDEX_AP, 0) END) AS INDP,
IND_NM002, IND_NM001, IND_DT001
FROM ICMADMIN.table_001 A
INNER JOIN ICMADMIN.table_002 ON INDEX_NOREL = A.INDEX_NOREL
LEFT OUTER JOIN ICMADMIN.table_001 B ON B.VT2CTO_NOCTO = A.INDEX_FATT
WHERE A.INDEX_NO=31 WITH UR FOR FETCH ONLY;
答案 0 :(得分:2)
问题可能是由于以下条款引起的:
INNER JOIN ICMADMIN.table_002 ON INDEX_NOREL = A.INDEX_NOREL
左侧的INDEX_NOREL
没有任何表别名。由于ICMADMIN.table_001
和ICMADMIN.table_002
都具有名为INDEX_NOREL
的列,因此这就是您面临此问题的原因。只需为ICMADMIN.table_002
创建一个别名并在INDEX_NOREL
旁边加上该别名即可使用。
FROM ICMADMIN.table_001 A
INNER JOIN ICMADMIN.table_002 C ON C.INDEX_NOREL = A.INDEX_NOREL