无法找到此查询的解决方案

时间:2013-06-09 14:32:09

标签: mysql

我得到了这张桌子:

Students (Name);

Exam (IDExam)

Exams_Prenotations(StudentName,Exam)

我希望所有参加考试的学生都与名为'Bob'的学生一样。 (如果bob参加考试'EXAM1'和'EXAM2',我希望所有将与他一起做'EXAM1'和'EXAM2'的学生。)

CANT 使用SUBQUERIES。

谢谢

2 个答案:

答案 0 :(得分: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'

如果那不是你想要的;那么,你需要重新表述你的问题。数据结构也会有所帮助。

答案 1 :(得分: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   

...现在加入临时表到原件,我们可以让学生和鲍勃一起做同样的考试:

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