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

子查询列名歧义及GROUP BY表达式错误问题求解

解决SQL子查询的列歧义与GROUP BY问题

针对你的问题,有两种可行的调整方式,既能保留NOMBREUNIDAD作为输出列名,又能解决两个报错:

方式一:将指定表的列加入GROUP BY子句

你使用的是Oracle数据库,其语法要求SELECT列表中的非聚合列必须全部出现在GROUP BY子句中。修改后的子查询如下:

(
 SELECT ID_PLAN, ID_CURSO, NEDICION, UNIDADES.NOMBRE AS NOMBREUNIDAD 
 FROM ASISTEN, ALUMNOS, UNIDADES
 WHERE ASISTEN.COD = ALUMNOS.COD 
   AND UNIDADES.IDESTRUCTURA = ALUMNOS.IDESTRUCTURA
   AND UNIDADES.CDUNDORG = ALUMNOS.CDUNDORG
   AND UPPER(TRANSLATE(UNIDADES.NOMBRE, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE '%CONSEJERIA%'
 GROUP BY ID_PLAN, ID_CURSO, NEDICION, UNIDADES.NOMBRE
) ASIS

这段代码既明确了NOMBRE列来自UNIDADES表,解决了列歧义问题,同时遵守了Oracle的GROUP BY规则,不会再触发"not a GROUP BY expression"错误。

方式二:用聚合函数包裹指定列(无需修改GROUP BY)

如果每组ID_PLAN, ID_CURSO, NEDICION对应的UNIDADES.NOMBRE是唯一值,可以用聚合函数(如MAX()或MIN())包裹该列,无需调整GROUP BY子句:

(
 SELECT ID_PLAN, ID_CURSO, NEDICION, MAX(UNIDADES.NOMBRE) AS NOMBREUNIDAD 
 FROM ASISTEN, ALUMNOS, UNIDADES
 WHERE ASISTEN.COD = ALUMNOS.COD 
   AND UNIDADES.IDESTRUCTURA = ALUMNOS.IDESTRUCTURA
   AND UNIDADES.CDUNDORG = ALUMNOS.CDUNDORG
   AND UPPER(TRANSLATE(UNIDADES.NOMBRE, 'áéíóúÁÉÍÓÚ', 'aeiouAEIOU')) LIKE '%CONSEJERIA%'
 GROUP BY ID_PLAN, ID_CURSO, NEDICION
) ASIS

这种方式适合确定分组内该列无重复值的场景,聚合后不会改变实际结果,同时满足语法要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:45:28