还有其他方法可以提取考试次数吗?

时间:2019-03-24 14:50:46

标签: php sql database oracle phpmyadmin

大家好,我有一个需要帮助的问题,我正在尝试获取指定学生的考试次数

我们有三个表:

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似乎不起作用,这里的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

您在etudiantmodule之间有一个联接,但是在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

希望这会有所帮助。