Domanda

Ho un'assegnazione di database che devo creare un po 'di algebra relazionale per due problemi. Mi sento abbastanza bene con la maggior parte, ma mi confondo solo quando provo a proiettare gli attributi da una tabella che è unita a un'altra tabella.

per esempio è corretto?

Q1) Elencare i dettagli delle incidenze senza effettuare chiamate, in modo che l'addetto alla reception lo sappia quali incidenti devono ancora essere chiamati.

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))))

L'SQL che sto cercando di interpretare in algebra relazionale è:

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 = ''

Qualsiasi consiglio sarebbe molto apprezzato.

È stato utile?

Soluzione

La tua versione sembra corretta, ad eccezione di alcuni errori di battitura come STAFF.INCIDENT.LastName. Ecco la mia versione:

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)

Altri suggerimenti

È di solito (alcune eccezioni si applicano, ovviamente) più facile da leggere e comprendere sql se si scrive tutto con LEFT JOINs:

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 = ''
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top