2

2つの問題に対して関係代数を作成する必要があるデータベース割り当てがあります。私はそれの大部分でかなり大丈夫だと感じていますが、別のテーブルに結合されているテーブルから属性を投影しようとすると混乱します。

たとえば、これは正しいですか?

Q1)受付係がまだどのインシデントに電話をかける必要があるかを知ることができるように、電話をかけなかったインシデントの詳細をリストしてください。

RESULT <-- PROJECT<STUDENT.FirstName, STUDENT.LastName, STAFF.FirstName,
STAFF.INCIDENT.LastName, INCIDENT.DateTimeReported, 
INCIDENT.NatureOfIllness(SELECTINCIDENT.DecisionMade = 
  ''(Staff RIGHT JOIN<STAFF.StaffID = INCIDENT.StaffID>
(INCIDENT LEFT JOIN<INCIDENT.StudentID = STUDENT.StudentID>(STUDENT))))

私が関係代数に解釈しようとしているSQLは次のとおりです。

SELECT 
  s.FirstName, s.LastName, st.FirstName, st.LastName
  , i.DateTimeReported, i.NatureOfIllness
FROM Student s 
RIGHT JOIN Incident i ON s.StudentID = i.StudentID  
LEFT JOIN Staff st ON st.StaffID = i.StaffID
WHERE i.DecisionMade = ''

アドバイスをいただければ幸いです。

4

2 に答える 2

2

通常すべてを LEFT JOIN で記述すると、SQL を読みやすく理解しやすくなります (もちろん、いくつかの例外が適用されます)。

SELECT s.FirstName, s.LastName, st.FirstName, st.LastName, i.DateTimeReported, i.NatureOfIllness
FROM Incident i
LEFT JOIN Student s ON s.StudentID = i.StudentID
LEFT JOIN Staff st ON st.StaffID = i.StaffID
WHERE i.DecisionMade = ''
于 2009-01-06T22:13:08.893 に答える
1

STAFF.INCIDENT.LastNameのようないくつかのタイプミスを除いて、あなたのバージョンは正しいようです。これが私のバージョンです:

RESULT <--- 
   PROJECT <STUDENT.FirstName, STUDENT.LastName, 
                     STAFF.FirstName, STAFF.LastName,
                     INCIDENT.DateTimeReported, INCIDENT.NatureOfIllness>
      (SELECT <INCIDENT.DecisionMade = ''> 
         ((STUDENT RIGHT JOIN <STUDENT.StudentID = INCIDENT.StudentID> INCIDENT)
             LEFT JOIN <INCIDENT.StaffID = STAFF.StaffID> STAFF)
于 2009-01-06T21:54:41.363 に答える