IBM DB2:具有多个联接的SQL查询

时间:2018-08-08 08:27:43

标签: sql db2

我需要迁移带有一些查询的一系列脚本,这些查询在多个表上执行大量联接,以获取注册表的值。

不幸的是,由于出现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;

1 个答案:

答案 0 :(得分:2)

问题可能是由于以下条款引起的:

INNER JOIN ICMADMIN.table_002 ON INDEX_NOREL = A.INDEX_NOREL

左侧的INDEX_NOREL没有任何表别名。由于ICMADMIN.table_001ICMADMIN.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