DB2 SQL中WHERE子句添加子查询时遭遇SQLCODE=-104错误的求助
DB2 SQL中WHERE子句添加子查询时遭遇SQLCODE=-104错误的求助
看起来你遇到的是DB2的语法解析错误(SQLCODE=-104),我帮你梳理下几个可能的问题点:
- 别名重复冲突:主查询里已经把
true表别名为b了,但子查询里又把Parameter表也别名为b——在同一个SQL语句中,别名是不能重复的,DB2无法区分这两个b,这大概率是触发当前错误的核心原因。 - 拼写错误:子查询里的
ax.acess_code少了一个字母c,正确应该是ax.access_code,这个虽然可能不是当前报错的直接原因,但后续执行时也会引发字段不存在的问题。 - 建议使用显式JOIN语法:你现在用的是旧的逗号连接表的方式,换成显式的
JOIN语法会让表关联逻辑更清晰,也能减少隐式连接带来的意外问题。
下面是修正后的SQL示例:
SELECT a.abc, b.xyz, c.yup FROM coin a JOIN true b ON a.id = b.id JOIN yes c ON b.id = c.id WHERE a.access_code IN ( SELECT ax.access_code FROM coin ax JOIN Parameter p ON ax.flow_id = p.flow_id WHERE p.start_date = '2022-06-21' AND p.result = 'B' )
主要做了这些修改:
- 把子查询里的
Parameter表别名改成了p,避免和主查询的b重复 - 修正了
access_code的拼写错误 - 把所有表连接都换成了显式的
JOIN ... ON语法,让关联逻辑更直观
你可以试试这个修正后的语句,应该能解决当前的语法错误问题。
备注:内容来源于stack exchange,提问作者SKINNY
相关产品推荐
相关产品推荐

