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