-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

あなたは何ができるかを言っておらず、あなたが言及した 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     
于 2013-06-09T16:09:06.250 に答える