0

これらのテーブルがあります(簡略化):

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)

インシデントがあり、おそらく複数が関与しています。各関係者は複数の予定を持つことができ、各予定には複数の関係者が出席できます。関連するタイプがあります (この例では、プリンシパル = 1、セカンダリ = 2)。

idAppointment が与えられた場合、その特定の予定に出席するかどうかに関係なく、そのインシデントに関与するプリンシパルを知る必要があります。

ここのところ:

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

関係する校長がその予定に出席しない限り、それは明らかに機能しません。それはある種の自己結合ですか?関係者は idInvolved によって直接関連付けることができるため、Incident テーブルは実際には必要ありません。

ありがとうございました!

4

1 に答える 1

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>)
于 2012-08-09T15:16:40.453 に答える