MySQL,Perlの詳しい方、お願いします。


人マスターと、商品マスターと、持ち物マスターがあり、
誰がどの商品を持っているかを管理したいと思います。

HITOMASTER
------+--------
HITOCD|HITONAME
------+--------
1|A
2|B
------+--------
以下、レコード数は不定

SHOUHINMASTER
---------+-----------
SHOUHINCD|SHOUHINNAME
---------+-----------
1|パソコン
2|テレビ
3|車
---------+-----------
以下、レコード数は不定


MOCHIMONOMASTER
------+---------
HITOCD|SHOUHINCD
------+---------
1|1
1|3
2|1
2|2
2|3
------+---------
以下、レコード数は不定


これを、以下のように表示したいのですが、

----+------------
名前|持ってるもの
----+------------
A |パソコン、車
----+------------
B |パソコン、テレビ、車
----+------------

どのようなプログラム、SQL文を書くとよいでしょうか。

1行表示するごとに、その行の人が持っているものを一回ずつ絞り込んでいくというのは考えてみたのですが、
もっとスマートなやり方がありますでしょうか?

なお、すべてのテーブルの件数は不定です。

回答の条件
  • 1人2回まで
  • 登録:2007/09/30 01:15:52
  • 終了:2007/09/30 01:58:23

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/09/30 01:42:29

ポイント100pt

下記のような感じでどうでしょうか。


SELECT hitoname, GROUP_CONCAT( shohinname ) AS mochimono_list
FROM mochimonomaster
INNER JOIN hitomaster ON mochimonomaster.hitocd = hitomaster.hitocd
INNER JOIN shouhinmaster ON mochimonomaster.shouhincd = shouhinmaster.shouhincd
GROUP BY hitoname

実行結果は bonyan さんが例示されたようになると思います。

id:bonyan

ありがとうございます。

SELECT hitoname, GROUP_CONCAT( shouhinmei ) AS mochimono_list

FROM mochimonomaster

INNER JOIN hitomaster ON mochimonomaster.hitocd = hitomaster.hitocd

INNER JOIN shouhinmaster ON mochimonomaster.shouhincd = shouhinmaster.shouhincd

GROUP BY hitoname

でばっちり希望する形が取得できました。これから内容を確認させていただきます。

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

2007/09/30 01:57:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません