Есть ли другой способ извлечь номер экзамена? - PullRequest
0 голосов
/ 24 марта 2019

Привет всем, у меня есть проблема, с которой мне нужна помощь. Я пытаюсь получить номер экзамена для указанного студента

у нас есть три таблицы:

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 в этом случае не работает, какое здесь решение?

1 Ответ

1 голос
/ 24 марта 2019

У вас есть соединение между 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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...