2012-08-09 72 views
0

我有这些表(简体):MySQL,与同一个表上的字段相关的元组,GROUP BY或SELF JOIN?

Appointment(
    INT idAppointment, 
    DATETIME start, 
    DATETIME end) 

AppointmentInvolved(
    INT idAppointment, 
    INT idInvolved) 

Involved(
    INT idInvolved, 
    VARCHAR name, 
    INT type, 
    INT idIncident) 

Incident(
    INT idIncident, 
    VARCHAR description) 

出现了突发事件,可能有几位参与就可以了。每个参与可以有多个任命,并且每个任命可以由多个参与参与。涉及的类型(本例中为principal = 1,secondary = 2)。

鉴于id的约会,我需要知道参与该事件的主体,无论他是否要参加特定的约会。

到目前为止:

SELECT(*) 
FROM Appointments a 
INNER JOIN (AppointmentInvolved ai) ON ai.idAppointment = a.idAppointment, 
INNER JOIN (Involved i) ON i.idInvolved = ai.idInvolved, 
INNER JOIN (Incident in) ON i.idIncident = in.idIncident, 
WHERE a.idAppointment = <WHATEV> 
WHERE in.type=1 

,除非涉及到的主要是要参加这一任命显然是行不通的。 那是一种自我加入吗?我并不需要Incident表,因为可以直接通过idInvolved关联相关人员。

谢谢!

回答

0
SELECT * 
FROM Involved I 
WHERE I.type=1 
    AND I.idIncident IN (SELECT I2.idIncident 
         FROM AppointmentInvolved AI 
          INNER JOIN Involved I2 ON AI.idInvolved = I2.idInvolved 
          WHERE AI.idAppointment=<WHATEV>) 
+0

如果我需要更多的预约领域,该怎么办?我如何选择它们并仍然使WHERE IN语句正常工作? – manutenfruits 2012-08-10 07:12:13

+0

您将需要使用您的初始SELECT语句,但用我的答案中的WHERE子句替换。 – 2012-08-10 12:34:35