Найти список студентов, которые проходят точно такой же курс SQL - PullRequest
0 голосов
/ 26 апреля 2018

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

Select s1.email
From student s, student s1
where s1.sname <> 'Alice'
and not exists (select 1
                from enrol e, course c, enrol e1
                where s.sname = 'Alice'
                and s.sid = e.sid
                and s1.sid = e1.sid         
                and e1.code <> e.code );

Пожалуйста, обратитесь к: http://sqlfiddle.com/#!9/aaaf58/5

Этомоя примерная база данных, добавленная в несколько фиктивных значений, чтобы я мог протестировать этот SQL-запрос.

  • Что я пытаюсь сделать, это найти список студентов, которые приняли точноете же курсы, которые этот конкретный студент назвал Алисой.

  • Многие из запросов SQL, которые я видел, не используются.Поэтому я попытался реализовать это, но не получилось.Я должен получить b @ hotmail вместо b @ hotmail и c @ hotmail.(Поскольку только Боб прошел точно такой же курс, что и Алиса)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Попробуйте этот запрос

select email 
from student where sid in 
(select distinct sid from enrol where code in 
 (select distinct code from enrol where sid in 
  (select sid from student where sname = 'Alice') --In case you have more than one Alice students it still get all classmate of all Alice
 )
)
and sname <> 'Alice'
0 голосов
/ 26 апреля 2018

Попробуйте следующий запрос

SELECT *
FROM
  (
    SELECT s.sid,s.email,GROUP_CONCAT(e.code ORDER BY code) course_list
    FROM student s
    JOIN enrol e ON e.sid=s.sid
    WHERE s.sname<>'Alice'
    GROUP BY s.sid,s.email
  ) q
WHERE course_list=(
        SELECT GROUP_CONCAT(e.code ORDER BY code) course_list
        FROM enrol e
        JOIN student s ON e.sid=s.sid
        WHERE s.sname='Alice'
      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...