人マスターと、商品マスターと、持ち物マスターがあり、
誰がどの商品を持っているかを管理したいと思います。
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行表示するごとに、その行の人が持っているものを一回ずつ絞り込んでいくというのは考えてみたのですが、
もっとスマートなやり方がありますでしょうか?
なお、すべてのテーブルの件数は不定です。
下記のような感じでどうでしょうか。
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 さんが例示されたようになると思います。
ありがとうございます。
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
でばっちり希望する形が取得できました。これから内容を確認させていただきます。
ありがとうございました。