- ベストアンサー
left join?で実現できそうなこのクエリを一行で書いてみたい。
left joinについてお聞きします。一行で実現できるのかどうか、興味があります。 student | id | name | class | | 1 | aaa | 1 | | 2 | bbb | 3 | | 3 | ccc | 4 | | 4 | ddd | 3 | | 5 | eee | 1 | iinkai | id | student.id | name | meeting | | 1 | 1 | tosho | 2006-11-30 | | 2 | 2 | souji | 2006-12-02 | | 3 | 2 | siiku | 2006-12-03 | | 4 | 3 | tosho | 2006-11-30 | ルール ・studentからclassが3,4,5の生徒を抽出 ・iinkaiに所属していなくても生徒は抽出 ・所属していても、全てのmeetingが既に終わっていればいらない ・複数のiinkaiに所属している場合は、2006-12-01以降にmeetingが行われるもので直近のinnkaiを表示する 結果として欲しいテーブルは | student.id | class | iinkai.id | iinkai.name | meeting | | 2 | 3 | 2 | souji | 2006-12-02 | | 3 | 4 | null | null | null | | 4 | 3 | null | null | null | 文字数が足りません。ご教授お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (3)
- chukenkenkou
- ベストアンサー率43% (833/1926)
回答No.3
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.2
- chukenkenkou
- ベストアンサー率43% (833/1926)
回答No.1
補足
>>・所属していても、全てのmeetingが既に終わっていればいらない >意味がわかりません。 えっと、説明不足でした。すいません。 このSQLを発行する日にちを仮に「2006-12-01」であるとしたときに、meetingがその日以前に行われたiinkaiは考慮しないということです。 そして直近の意味としては、この日(2006-12-01)以降で一番最初にmeetingが開かれるものを抽出したいという意味でした。 >>・複数のiinkaiに所属している場合は、2006-12-01以降にmeetingが >>行われるもので直近のinnkaiを表示する >複数ではない場合は2006-12-01以降という制限は無視してよいのでしょうか? >また、前項と競合する場合はどちらが優先するのでしょうか? 単数、複数に限らず既に終了しているmeetingは無視します。その日以降に開催されるmeetingで生徒が所属していて、一番最初に開催されるものをその生徒の行に表示します。その日以降、その生徒が参加しなくてはならないmettingが複数・単数に関わらずです。 ちなみにmysqlのバージョンは、4.0.26でした。レンタルサーバなのでヴァージョンは変えられないので、このヴァージョンに対応したものをお願いします。 最後のルール「その日以降で直近に開催されるものを1つだけ表示する」というのが難しくて、分からなかったので、ここに関してもう少し教えていただけたらと思いました。 不可能なら不可能ということを知りたい、という気持ちです。