ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:madman666 テーブルの結合・・・
困り度:
  • すぐに回答を!
教室テーブル
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組, 田中 後藤 加藤

というように表示したいのです。
できればクエリだけで解決したいのですが・・・

よろしくお願いします。
質問投稿日時:08/03/17 15:25
質問番号:3870663
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:chukenkenkou #2回答者です。

>空の列を作って一つずつ格納する方法

受け取る列数を可変にするのは、SQLだけでは困難です。もしSQLでやろうとすれば、最大の列数を固定にし、その個数分をジョインするとか、サブクエリするといった方法になり、冗長で性能を出せないSQLになってしまいます。
また、MySQLに限定するなら、group_concat関数の結果を利用して、それを最大列数分に関数を駆使して分割するといった方法も考えられますが、非常に冗長なSQLになります。

したがってアプリケーションでやるとか、MySQL 5.0以降ならストアド・プロシジャを使用するといった方法のほうがシンプルに行えます。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/19 01:23
回答番号:No.3
この回答へのお礼何度もありがとうございます。

MySQL 5.0は以降なので、
ストアドプロシジャやビューが使えるので、それを使ってやろうかと思うのですが、
いまいちイメージが沸きません;

「空の列を作って格納する」ためのクエリを、だいたいのイメージでもいいので、教えていただけないでしょうか?

よろしくお願いします。

回答

良回答20pt

回答者:chukenkenkou group byとgroup_concat関数を調べてみましょう。

http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html

group_concat関数は、他のRDBMSでは類似機能を見かけない珍しい機能です。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:08/03/17 17:52
回答番号:No.2
この回答へのお礼回答ありがとうございます。
group_concatを使って、思っていたとおりのことができました。

しかし、もう一つ知っておきたいのですが、
group_concatのように、セパレーターを使って一つの列につめこむのではなくて、空の列を作って一つずつ格納する方法をご存じでしたら、どうかご教授いただきたいのですが・・・

よろしくお願いします。

回答

良回答10pt

回答者:yambejp 基本的にはSQLの仕事じゃないですが、どうしてもできないわけではないかな
やるべきではないと思いますが・・・

とりあえずバージョンは?
それと、「佐藤 山田」とあるのは佐藤と山田は別の列でしょうか?
それとも半角スペースをセパレータとして同じ列に表示したいのでしょうか?
種類:補足要求
どんな人:一般人
自信:参考意見
回答日時:08/03/17 16:54
回答番号:No.1
この回答へのお礼MySQLのバージョンは5.0.51aです。

「佐藤 山田」というのは、同じ列です。
おっしゃるとおり半角スペースで区切って同じ列に表示したいのです。

ちなみに、同じ列ではない場合、どんな感じになるのでしょうか?
該当する人数分だけ自動で列が足されるのでしょうか?

よろしくお願いします。
 
最新から表示回答順に表示良回答のみ表示