我得到了这个表:
Students (Name);
Exam (IDExam)
Exams_Prenotations(StudentName,Exam)
我希望所有与名为“鲍勃”的学生进行相同考试的学生。(如果鲍勃参加了“EXAM1”和“EXAM2”的考试,我希望所有与他一起参加“EXAM1”和“EXAM2”的学生)。
我不能使用子查询。
谢谢
我得到了这个表:
Students (Name);
Exam (IDExam)
Exams_Prenotations(StudentName,Exam)
我希望所有与名为“鲍勃”的学生进行相同考试的学生。(如果鲍勃参加了“EXAM1”和“EXAM2”的考试,我希望所有与他一起参加“EXAM1”和“EXAM2”的学生)。
我不能使用子查询。
谢谢
您需要以下内容:
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'
如果那不是您正在寻找的;然后,您需要重新提出您的问题。数据结构也会有所帮助。
你没有说你能做什么,也没有给出你提到的三个表的详细信息,所以我做了一些假设。
此外,为了快速演示,它位于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