通过另一表最新记录字段查询表数据时报-4743错误如何解决
问题原因
你遇到的-4743是DB2数据库的专属错误,触发原因是当前数据库的应用兼容性级别设置较低,不支持在IN条件的嵌套子查询中使用LIMIT子句,同时DB2原生更推荐使用FETCH FIRST语法实现取首条记录的逻辑。
解决方案
方案1:替换LIMIT为兼容语法
因为你的子查询仅返回1条结果,用=替代IN执行效率更高,也更适配低兼容级别的语法要求,调整后的SQL如下:
SELECT guardian_nm, guardian_age FROM guardian WHERE stu_uid = ( SELECT stu_uid FROM student WHERE stu_id = 1 ORDER BY timestamp DESC FETCH FIRST 1 ROW ONLY )
方案2:使用开窗函数适配更老版本
如果调整后仍报错,说明你的数据库兼容版本极低,不支持子查询内的取首条语法,可以改用开窗函数ROW_NUMBER()实现相同逻辑:
SELECT g.guardian_nm, g.guardian_age FROM guardian g INNER JOIN ( SELECT stu_uid, ROW_NUMBER() OVER(ORDER BY timestamp DESC) AS rn FROM student WHERE stu_id = 1 ) s ON g.stu_uid = s.stu_uid AND s.rn = 1
如果修改语法后仍存在报错,可以联系数据库管理员确认当前应用兼容性级别,升级到对应版本即可支持新语法。
内容的提问来源于stack exchange,提问作者Kelvin
相关产品推荐
相关产品推荐

