私は次のテーブルを持っています:
表: 教師:
教師
ID 教師名
表: 学生:
学生
ID 学生名 教師ID
顧問
ID
したがって、通常、INNER JOIN を使用して教師の名前を付けて、生徒ごとに 1 つの行を取得できることがわかっています。
ただし、この場合、アドバイザーとタッチャーは同じ教師テーブルから来ています。では、どうすれば教師のテーブルに 2 回参加できますか?
これが明確であることを願っています
ありがとう!
私は次のテーブルを持っています:
表: 教師:
教師
ID 教師名
表: 学生:
学生
ID 学生名 教師ID
顧問
ID
したがって、通常、INNER JOIN を使用して教師の名前を付けて、生徒ごとに 1 つの行を取得できることがわかっています。
ただし、この場合、アドバイザーとタッチャーは同じ教師テーブルから来ています。では、どうすれば教師のテーブルに 2 回参加できますか?
これが明確であることを願っています
ありがとう!
これは、(a) 教師または (b) アドバイザーのどちらも存在しなくても、生徒のアルファベット順で、教師とアドバイザーの名前があれば生徒をリストします。これらの名前が存在する場所のみが必要な場合は、それぞれの結合を INNER 結合に変更します。
SELECT s.studentname as [Student], t.teachername as [Teacher], a.teachername as [Advisor]
FROM Students s
LEFT JOIN Teachers t ON s.TeacherID = t.TeacherID
LEFT JOIN Teachers a ON s.AdvisorID = a.TeacherID
ORDER BY 1, 2
同じテーブルに複数回参加できます。結合ごとに異なるエイリアスを指定し、フィールドに十分に説明的な名前を付けてください。リンクがない可能性がある場合は左結合を使用しますが、生徒に常に教師とアドバイザーの両方がいる場合は、直線結合で問題ありません。
このようなもの:
select s.studentname student
, t.teachername teacher
, a.teachername advisor
from students s
join teacher t
on t.teacherID = s.teacherID
join teacher a
on a.teacherID = s.teacherID
次のようなことを試してみませんか。私がSQLをやってからしばらく経っているので、これはうまくいかないかもしれません。
SELECT s.studentName AS Student, t.teacherName AS Teacher, a.teacherName AS Advisor
FROM teachers t, teachers a, students s
WHERE t.teacherID = s.teacherID AND a.teacherID = s.advisorID