MySQL,在同一个表,GROUP BY或SELF JOIN上按字段相关的元组?

时间:2012-08-09 14:50:47

标签: mysql join group-by

我有这些表格(简化):

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)

有一个事件,可能有几个涉及它。每个Involved可以有多个约会,每个约会可以由多个Involved注册。涉及的类型(本例中为principal = 1,secondary = 2)。

鉴于idinointment我需要知道该事件中涉及的委托人,无论他是否将参加该特定任命。

到目前为止:

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表,因为Involved人员可以通过idInvolved直接关联。

谢谢!

1 个答案:

答案 0 :(得分: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>)