0

次のようなデータベースがあります。

table_Students: { studentid(PK), name };

table_Stu_cou:{ studentid(FK), courseid(FK) };

table_Courses:{ courseid(PK), coursename };

table_Tea_cou { courseid(FK), teacherid(FK) };

table_Teachers:{ teacherid(PK), name};

stu_cou テーブルは、どの学生がどのコースに参加するかを示します。tea_cou テーブルは、どの教師がどのコースを教えているかを示しています。一度も会ったことのないすべての学生と教師をリストする必要があります (学生はこの講師が提供するコースに参加したことがありません)。でも、作り方が分からず、2日間頑張っています。私たちを手伝ってくれますか?オラクルを使用しています。

4

3 に答える 3

1
SELECT s.name, t.name FROM students s CROSS JOIN teachers t
WHERE NOT EXISTS (
    SELECT 1 FROM courses c
    JOIN stu_cou sc ON sc.courseid = c.courseid AND sc.studentid = s.studentid
    JOIN tea_cou tc ON tc.courseic = c.courseic AND tc.teacherid = t.id
)

基本的に、学生と教師のあらゆる可能な組み合わせについて、その学生が出席し、その教師が教えたコースはありますか?

于 2013-05-10T05:14:19.040 に答える
0

必要なのは、最初にすべての潜在的な生徒と教師のペアを計算してから、出会った生徒の教師を差し引くことです。

1 つ目は、生徒と教師の交差積で行われます。受講したコースに基づいて結合された 2 つ目:

SELECT studentid, teacherid from students, teachers

EXCEPT

select studentid, teacherid from stu_cou natural join tea_cou;

生徒の名前と教師の名前に関心がある場合は、この結果をサブクエリとして使用し、Students テーブルと Teachers テーブルに結合してその情報を取得できます。しかし、それはあなたの練習問題として残しておきます。

--dmg

于 2013-05-10T05:13:28.147 に答える
0

タイプミスを修正したら、これでうまくいくはずです

select t.name, s.name
from  table_Teachers t, table_Students s
where not exists (
    select 'x' 
    from table_Stu_cou sc, table_Tea_cou tc
    where sc.courseid = tc.courseid
    and sc.studentid = s.studentid
    and tc.teacherid = t.teacherid
) 
于 2013-05-10T05:13:39.510 に答える