oracle sql request column ambiguously defined

477 views Asked by At

I am working on oracle 11g and tried to execute this request

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;

but it says!

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

what is wrong in it? if I execute this request, it works

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;
2

There are 2 answers

1
Barbaros Özhan On BEST ANSWER

you have at least two of code_mod,INTITULE,code_et,nom columns in note,exam,module,etudiant tables, and put them without aliases.

As an example both module and exam table include code_mod column, and in the select list you didn't show where it comes from

Use like this :

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;

and you should include all columns in group by expression without grouping functions.

2
ScaisEdge On

You have column with the same name in more than one table involved in the query, so you must prefix the column with proper table name eg:

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;