- ベストアンサー
テーブルの結合・・・
教室テーブル id, class 1, A組 2, B組 3, C組 生徒テーブル id, name 1, 佐藤 1, 山田 2, 鈴木 3, 田中 3, 後藤 3, 加藤 という二つのテーブルがあります。 これらをLEFT JOINで結合したのですが。 A組, 佐藤 A組, 山田 B組, 鈴木 C組, 田中 C組, 後藤 C組, 加藤 となってしまいます。 これを同じ教室名でまとめて、 A組, 佐藤 山田 B組, 鈴木 C組, 田中 後藤 加藤 というように表示したいのです。 できればクエリだけで解決したいのですが・・・ よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
group byとgroup_concat関数を調べてみましょう。 http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html group_concat関数は、他のRDBMSでは類似機能を見かけない珍しい機能です。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#2回答者です。 >空の列を作って一つずつ格納する方法 受け取る列数を可変にするのは、SQLだけでは困難です。もしSQLでやろうとすれば、最大の列数を固定にし、その個数分をジョインするとか、サブクエリするといった方法になり、冗長で性能を出せないSQLになってしまいます。 また、MySQLに限定するなら、group_concat関数の結果を利用して、それを最大列数分に関数を駆使して分割するといった方法も考えられますが、非常に冗長なSQLになります。 したがってアプリケーションでやるとか、MySQL 5.0以降ならストアド・プロシジャを使用するといった方法のほうがシンプルに行えます。
お礼
何度もありがとうございます。 MySQL 5.0は以降なので、 ストアドプロシジャやビューが使えるので、それを使ってやろうかと思うのですが、 いまいちイメージが沸きません; 「空の列を作って格納する」ためのクエリを、だいたいのイメージでもいいので、教えていただけないでしょうか? よろしくお願いします。
- yambejp
- ベストアンサー率51% (3827/7415)
基本的にはSQLの仕事じゃないですが、どうしてもできないわけではないかな やるべきではないと思いますが・・・ とりあえずバージョンは? それと、「佐藤 山田」とあるのは佐藤と山田は別の列でしょうか? それとも半角スペースをセパレータとして同じ列に表示したいのでしょうか?
お礼
MySQLのバージョンは5.0.51aです。 「佐藤 山田」というのは、同じ列です。 おっしゃるとおり半角スペースで区切って同じ列に表示したいのです。 ちなみに、同じ列ではない場合、どんな感じになるのでしょうか? 該当する人数分だけ自動で列が足されるのでしょうか? よろしくお願いします。
お礼
回答ありがとうございます。 group_concatを使って、思っていたとおりのことができました。 しかし、もう一つ知っておきたいのですが、 group_concatのように、セパレーターを使って一つの列につめこむのではなくて、空の列を作って一つずつ格納する方法をご存じでしたら、どうかご教授いただきたいのですが・・・ よろしくお願いします。