我正在处理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;
你在note
、exam
、module
、etudiant
表中至少有两列code_mod
、INTITULE
、code_et
、nom
列,并将它们放在没有别名的情况下。
例如,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;