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

Oracle执行MINUS查询时报ORA-01789列数不匹配错误求助

解决ORA-01789错误:查询块结果列数不匹配

ORA-01789错误的直接原因是MINUS运算符前后的两个查询返回的列数不一致:

  • 第一个查询返回4列:FSA_ID, NE_LENGTH, SPAN_REF_NAME, SPAN_NAME
  • 第二个查询仅返回3列:FSA_ID, NE_LENGTH, FSA_UG_ACTUAL

根据你处理两列长度数据的需求,有两种修正方式:

方式1:只保留核心需求列(推荐)

如果仅需要对比FSA_ID和NE_LENGTH,可以去掉两个查询中多余的列:

SELECT RJ_FSA_ID as FSA_ID, ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH
FROM NE.MV_SPAN@NE 
WHERE RJ_FSA_ID = 'GWLR0115' AND INVENTORY_STATUS_CODE = 'IPL'
AND SPAN_REF_NAME IN ('3x40-F-RG-ST-1L','3x40-F-RG-ST-1L','3x40-F-RG-ST-1L')
GROUP BY RJ_FSA_ID
MINUS
SELECT AA.FSA_ID as FSA_ID, AA.MAINT_ZONE_NE_SPAN_LENGTH AS NE_LENGTH
FROM TBL_FIBER_INV_JOBS AA
INNER JOIN TBL_FIBER_INV_JOB_PROGRESS BB
ON AA.JOB_ID = BB.JOB_ID
WHERE AA.FSA_ID = 'GWLR0115';

方式2:补充列数使其一致(需保留额外字段时)

如果必须保留第一个查询的4列,需要给第二个查询补充对应位置的列,用NULL填充缺失字段:

SELECT RJ_FSA_ID as FSA_ID, ROUND(SUM(NVL(CALCULATED_LENGTH,0)/1000),4) AS NE_LENGTH, SPAN_REF_NAME,SPAN_NAME 
FROM NE.MV_SPAN@NE 
WHERE RJ_FSA_ID = 'GWLR0115' AND INVENTORY_STATUS_CODE = 'IPL'
AND SPAN_REF_NAME IN ('3x40-F-RG-ST-1L','3x40-F-RG-ST-1L','3x40-F-RG-ST-1L')
GROUP BY RJ_FSA_ID,SPAN_REF_NAME,SPAN_NAME
MINUS
SELECT AA.FSA_ID as FSA_ID, AA.MAINT_ZONE_NE_SPAN_LENGTH AS NE_LENGTH, NULL AS SPAN_REF_NAME, NULL AS SPAN_NAME
FROM TBL_FIBER_INV_JOBS AA
INNER JOIN TBL_FIBER_INV_JOB_PROGRESS BB
ON AA.JOB_ID = BB.JOB_ID
WHERE AA.FSA_ID = 'GWLR0115';

注意:使用MINUS时,除了列数一致,对应位置的列数据类型也需要兼容,否则会触发新的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:44:56