【问题标题】:Is there any other way to extract the number of exam?有没有其他方法可以提取考试数量?
【发布时间】:2019-03-24 14:50:45
【问题描述】:

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

我们有三张桌子:

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 

所以基本上同班的学生意味着他们有相同的 filiere 和相同的 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 似乎不起作用,这里的解决方案是什么?

【问题讨论】:

  • 这不是 Oracle 代码。请标记您真正使用的数据库。
  • 欢迎来到 Stack Overflow。如果没有测试数据,很难确定建议的答案是否正确。请编辑您的问题(使用标签下方的edit 按钮)并在问题中包含所有表格的数据样本,以便重现问题。谢谢。

标签: php sql database oracle phpmyadmin


【解决方案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

希望这会有所帮助。

【讨论】:

  • 非常感谢您的回答,查询工作完美,但如果我想选择 Num_exam(例如 N_appoge = 1610065 的学生)并使用 Php 显示结果呢?
  • 我对 Php 一无所知,因此无法为您解决。最好的办法是再问一个问题。
  • 谢谢,我找到了解决方案。非常尊重你这个男人
  • 查询仍然存在问题,直到今天我才注意到它仍然给出重复的名称,例如 N_appoge=1610065 的学生重复几次或更多次,这取决于 table inscrit因为我们可以在 inscrit 中找到相同的 N_appoge 和不同的NUM_Module 我该如何解决这个@Bob
  • 删除(@num_exam:=@num_exam+1) as num_exam 看看是否得到它。您可以尝试提出另一个问题,并包含测试数据和预期结果,以便发布答案的人可以验证他们的查询是否提供了您预期的结果。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-25
  • 2010-12-22
  • 1970-01-01
相关资源
最近更新 更多