-3

我得到了这个表:

Students (Name);

Exam (IDExam)

Exams_Prenotations(StudentName,Exam)

我希望所有与名为“鲍勃”的学生进行相同考试的学生。(如果鲍勃参加了“EXAM1”和“EXAM2”的考试,我希望所有与他一起参加“EXAM1”和“EXAM2”的学生)。

不能使用子查询。

谢谢

4

2 回答 2

0

您需要以下内容:

SELECT *
  FROM
    STUDENTS s
    INNER JOIN EXAMS_STUDENTS es ON es.student_id = s.id
    INNER JOIN EXAMS e ON e.id = es.exam_id
WHERE
  s.name = 'Bob'

如果那不是您正在寻找的;然后,您需要重新提出您的问题。数据结构也会有所帮助。

于 2013-06-09T15:21:28.143 回答
0

你没有说你能做什么,也没有给出你提到的三个表的详细信息,所以我做了一些假设。

此外,为了快速演示,它位于sqlite中,而不是 mysql 中,但查询应该或多或少相同。

数据结构:

sqlite> select * from students;
id          name      
----------  ----------
1           alice       
2           bob     
3           charles   
4           dave    

sqlite> select * from exam;
id          name      
----------  ----------
1           maths     
2           art       
3           physics 


sqlite> select * from exams_prenotations;
student_id  exam_id   
----------  ----------
1           1         
1           3         
2           1         
2           3         
3           2         
4           2     

然后我们用这些表创建一个临时表来保存 Bob 考试的考试 ID:

create temporary table bob_exams as 
  select x.id 
    from exam x 
    join exams_prenotations e on e.exam_id = x.id 
    join students s on s.id = e.student_id 
   where s.name = "bob";

sqlite> select * from bob_exams;
id        
----------
1         
3   

...现在将临时表加入原始表,我们可以让学生与 Bob 进行相同的考试:

select s.name 
  from exam x 
  join exams_prenotations e on e.exam_id = x.id 
  join students s on s.id = e.student_id 
  join bob_exams b on b.id = x.id 
group by s.name;

name      
----------
alice     
bob     
于 2013-06-09T16:09:06.250 回答