Oracle SQL 请求列定义不明确



我正在处理oracle 11g并尝试执行此请求

select code_mod,INTITULE,code_et,nom ,avg(note)
from note,exam,module,etudiant
where note.CODE_EX = exam.CODE_EX 
and EXAM.CODE_MOD=MODULE.CODE_MOD
and NOTE.CODE_ET = ETUDIANT.CODE_ET
group by code_mod,code_et 
order by code_mod;

但它说!

ORA-00918: column ambiguously defined
00918. 00000 -  "column ambiguously defined"
*Cause:    
*Action:
Error on line 6, colunn 19

它有什么问题? 如果我执行此请求,它就可以工作

select *
from note,exam,module,etudiant
where note.CODE_EX = exam.CODE_EX 
and EXAM.CODE_MOD=MODULE.CODE_MOD
and NOTE.CODE_ET = ETUDIANT.CODE_ET;

你在noteexammoduleetudiant表中至少有两列code_modINTITULEcode_etnom列,并将它们放在没有别名的情况下。

例如,module表和exam表都包含code_mod列,并且在选择列表中,您没有显示它的来源

像这样使用:

select m.code_mod,intitule,et.code_et,nom ,avg(note)
from note n
inner join exam e on ( n.code_ex = e.code_ex )
inner join module m on ( e.code_mod=m.code_mod )
inner join etudiant et on ( et.code_et = n.code_et )
group by m.code_mod,intitule,et.code_et,nom 
order by m.code_mod;

并且您应该group by表达式中包含所有列,而不grouping functions.

查询中涉及的多个表中具有相同名称的列,因此必须在列前面加上正确的表名,例如:

select 
EXAM.code_mod, INTITULE, EXAM.code_et, nom, avg(note)
from 
note, exam, module, etudiant
where 
note.CODE_EX = exam.CODE_EX 
and EXAM.CODE_MOD=MODULE.CODE_MOD
and NOTE.CODE_ET = ETUDIANT.CODE_ET
group by 
EXAMcode_mod, EXAM.code_et, INTITULE, nom
order by 
EXAM.code_mod;

相关内容

  • 没有找到相关文章

最新更新