大家好,我有一个需要帮助的问题,我正在尝试获取指定学生的考试次数
我们有三个表:
etudient (N_Appoge,Nom,PRENOM,filiere,....)
module (NUM_Module,Nom_module,Nom_semestre)
Inscrit (N_Appoge,NUM_Module) // this table is the relation between etudiant & module
所以基本上,同一班级的学生意味着他们拥有相同的语言和相同的Nom_semestre
我尝试了此查询:
set @num_exam=0;
SELECT DISTINCT N_APPOGE, NOM, PRENOM, filiere,Nom_semestre,
(@num_exam:=@num_exam+1) as num_exam FROM etudiant,
module
WHERE
filiere in (SELECT filiere FROM etudiant WHERE N_APPOGE='1610065' )
And
Nom_semestre In
(SELECT Nom_semestre from module WHERE Nom_semestre='s1'
and NUM_module in (SELECT NUM_module from inscrit where N_APPOGE='1610065'))
ORDER by NOM;
但结果与我预期的不同,它显示同一学生有N_APPOGE='1610065'
的两个结果,其他学生也有多个结果
在这种情况下,DISTINCT似乎不起作用,这里的解决方案是什么?
答案 0 :(得分:1)
您在etudiant
和module
之间有一个联接,但是在WHERE
子句中没有任何内容指定这两个表之间的关系。这样,数据库正在执行交叉连接(第一个表中的每一行都连接到第二个表中的每一行)。显然,您需要涉及到表inscrit
:
SELECT DISTINCT e.N_APPOGE,
e.NOM,
e.PRENOM,
e.filiere,
m.Nom_semestre,
(@num_exam:=@num_exam+1) as num_exam
FROM etudiant e
INNER JOIN inscrit i
ON i.N_Appoge = e.N_Appoge
INNER JOIN module m
ON m.NUM_Module = i.NUM_Module
WHERE e.filiere in (SELECT filiere
FROM etudiant
WHERE N_APPOGE='1610065') And
m.Nom_semestre In (SELECT Nom_semestre
from module
WHERE Nom_semestre='s1' and
NUM_module in (SELECT NUM_module
from inscrit
where N_APPOGE='1610065'))
ORDER by NOM
希望这会有所帮助。