私はこのテーブルを手に入れました:
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'
それがあなたが探しているものでない場合; 次に、質問を再定式化する必要があります。データ構造も役立ちます。
あなたは何ができるかを言っておらず、あなたが言及した 3 つのテーブルについてあまり詳しく説明していないので、いくつかの仮定を立てました。
また、簡単なデモンストレーションを作成する目的で、mysql ではなくsqliteにありますが、クエリは多かれ少なかれ同じである必要があります。
データの構造:
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
次に、これらのテーブルを使用して一時テーブルを作成し、ボブの試験の試験 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