残念ながら、私はあなたのグラフィックをズームすることができないので、以下は少し推測を必要としました。
すでに述べたように、特定のセッションから関連する講演者に到達するには2つの方法があります。まず、セッションに直接関連付けられているスピーカーのリストを取得できます。
SELECT speaker.* FROM `session-speaker-join-table`
JOIN speaker
ON speaker.id=`session-speaker-join-table`.speaker_id
WHERE `session-speaker-join-table`.session_id=1234
そして、スピーカー機能を介して間接的にリンクされたスピーカーのリストを取得する方法は次のとおりです。
SELECT speaker.* FROM section
JOIN `section-speakerfunction-join-table`
ON `section-speakerfunction-join-table`.section_id=section.id
JOIN speakerfunction
ON speakerfunction.id=`section-speakerfunction-join-table`.speakerfunction_id
JOIN speaker
ON speaker.id=speakerfunction.speaker_id
WHERE section.session_id=1234
編集:コメントを読んだ後、クエリ2の結果からクエリ1の結果を引いたものが必要だと理解しました。これはLEFT JOIN
、2番目のクエリにを追加し、次のように一致するものがないかどうかを確認することで実現できます。
SELECT speaker.* FROM section
JOIN `section-speakerfunction-join-table`
ON `section-speakerfunction-join-table`.section_id=section.id
JOIN speakerfunction
ON speakerfunction.id=`section-speakerfunction-join-table`.speakerfunction_id
JOIN speaker
ON speakerfunction.speaker_id = speaker.id
LEFT JOIN `session-speaker-join-table`
ON `session-speaker-join-table`.session_id=section.session_id
AND `session-speaker-join-table`.speaker_id=speaker.speaker_id
WHERE section.session_id=1234 AND `session-speaker-join-table`.speaker_id IS NULL
(テーブル名も変更し、バッククォートを含めました。すべてをキャッチできたと思います。また、読みやすくするためにクエリを再フォーマットしました。)