You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行指定SQL语句时提示‘too many values’错误的原因是什么?

嘿,这个问题我太熟了!你碰到的too many values错误根源其实特别清晰——NOT IN子句里的列数和左边要匹配的列数完全不搭。

你仔细看这段SQL:主查询里写的是MATNR NOT IN (...),也就是想用单个列MATNR去和子查询的结果做匹配,但你的子查询select MATNR, HKL from SONDER_AUFTRAG where GREIFLOK = 'J'返回了两个列(MATNR和HKL)。数据库直接懵了:我到底该拿子查询里的哪一列和左边的MATNR对比?这不就直接报“值太多”的错误了嘛。

接下来给你两种修正方向,对应不同的业务需求:

情况1:需要同时排除MATNR和HKL都匹配的记录

这种场景下,用NOT EXISTS比多列NOT IN更靠谱(还能避免NULL值带来的逻辑坑),修改后的SQL如下:

select MATNR, HKL 
from( 
    select MATNR, HKL from BESTAND where LOK_NR >1 and BEST_FREI =0 
    union 
    select MATNR, HKL from BESTAND where LOK_NR =1 and BEST_FREI >0 
) t
WHERE NOT EXISTS (
    select 1 
    from SONDER_AUFTRAG sa 
    where sa.GREIFLOK = 'J' 
      and sa.MATNR = t.MATNR 
      and sa.HKL = t.HKL
)
GROUP BY MATNR, HKL 
ORDER BY MATNR, HKL;

情况2:只需要排除MATNR出现在子查询里的记录

那直接把子查询改成只返回MATNR列就行,这样两边列数就完全匹配了:

select MATNR, HKL 
from( 
    select MATNR, HKL from BESTAND where LOK_NR >1 and BEST_FREI =0 
    union 
    select MATNR, HKL from BESTAND where LOK_NR =1 and BEST_FREI >0 
) t
WHERE MATNR NOT IN( 
    select MATNR from SONDER_AUFTRAG where GREIFLOK = 'J' 
)
GROUP BY MATNR, HKL 
ORDER BY MATNR, HKL;

内容的提问来源于stack exchange,提问作者Emjot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:49