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,通常(当然有一些例外)更容易阅读和理解 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 回答