Столбец запроса 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;

2 ответа

Решение

У вас есть как минимум два code_mod,INTITULE,code_et,nom столбцы в note,exam,module,etudiant таблицы и ставить их без псевдонимов.

Как пример оба 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;
Другие вопросы по тегам