0

こんにちは私は次のデータベーススキーマを持っています

Professor (EMP ID,Name,Status,Salary,Age)
Course(Course ID,Course Name,PoINts)
Works(Course ID,EMP ID,Class ID)

コースM1またはM2を教えたが、両方を教えていない従業員のリストを返すために、次のクエリを作成しました

SELECT p.empid,p.name
FROM professor p,course c,works w
WHERE p.empid = w.empid
AND w.courseid = c.courseid
AND ((c.coursename = ‘m1’ AND c.coursename != ‘m2’)
OR
(c.coursename = ‘m2’ AND c.coursename != ‘m1’))

私はSQLを初めて使用するので、上記のクエリは正しいですか?助けてください

4

2 に答える 2

1

この問題は通常、と呼ばれRelational Divisionます。m1以下のクエリは、やなどのコースを教える教授の名前をすべて取得しますm2。教授がフィルタリングされた後、それは次に個別の数を数えCourseNameます。もちろん、1つのコースしか教えていない場合は1つ返され:Dます。

SELECT  a.EmpID, a.Name
FROM    Professor a
        INNER JOIN Works b
            ON a.EmpID = b.EmpID
        INNER JOIN  Course c
            ON b.CourseID = c.CourseID
WHERE   c.CourseName IN ('m1', 'm2')
GROUP   BY a.EmpID, a.Name
HAVING  COUNT(DISTINCT c.CourseName) = 1
于 2013-03-11T06:05:59.273 に答える
0

試す:

SELECT p.empid,p.name
FROM professor p join works w on
p.empid = w.empid
having count(w.courseid) = 2

これは、合計2つのクラスがあることを前提としています。これは、可能性は低いですが、正しい方向を示します。

于 2013-03-11T06:09:57.830 に答える