如何修正SQL子查询ORA-00913: too many values错误(不使用视图)
错误原因
ORA-00913错误的根源是IN子句里的子查询返回了两列数据(CIFNO和SUM(LIMIT)),但IN只能匹配单一列的取值,多列返回会导致匹配逻辑冲突。
修正方案1:精简子查询返回列
直接修改子查询,只返回用于匹配的CIFNO列(SUM(LIMIT)仅作为过滤条件,不需要返回):
UPDATE PRE_LB SET PR_NPR = 'PR' WHERE CIFNO IN (SELECT CIFNO -- 仅保留需要匹配的列 FROM PRE_LB WHERE LTWPB IN ('SE','ED') GROUP BY CIFNO HAVING SUM(LIMIT) <= 2000000) AND LTWPB IN ('SE', 'ED');
修正方案2:改用EXISTS关联查询
如果数据量较大,用EXISTS做关联查询性能更优,逻辑也更直观:
UPDATE PRE_LB t1 SET PR_NPR = 'PR' WHERE LTWPB IN ('SE', 'ED') AND EXISTS (SELECT 1 FROM PRE_LB t2 WHERE t2.CIFNO = t1.CIFNO AND t2.LTWPB IN ('SE','ED') GROUP BY t2.CIFNO HAVING SUM(t2.LIMIT) <= 2000000);
内容的提问来源于stack exchange,提问作者Bala S
相关产品推荐
相关产品推荐

