みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アンケート結果を抽出するSQL文について

SQLの抽出方法について質問です。

【会員】テーブル関連
すきなフルーツを複数選択できます。
テーブル【MEMBER】と【MEMBER_FRUIT】2つのテーブルで管理
例:
Aさんは「りんご」「みかん」「スイカ」がすきです。
Bさんは「りんご」「メロン」がすきです。
Cさんは「みかん」「スイカ」がすきです。

同様に「好きな色」もテーブルで管理しています。

実際はこのような管理テーブルがアンケートの数だけあります。

テーブル【MEMBER】
ID、MEMBER_CD、MEMBER_NAME
1  10       Aさん
2  20       Bさん
3  30       Cさん



テーブル【MEMBER_FRUIT】
ID、MEMBER_CD、FRUIT_CD
1   10      1
2   10      2
3   10      3
4   20      1
5   20      4
6   30      2
7   30      3



テーブル【MEMBER_COLOR】
ID、MEMBER_CD、COLOR_CD
1   10      1
2   10      2
3   10      3
4   20      1
5   20      4
6   30      2
7   30      3



テーブル【FRUIT】
ID、ITEM
1 りんご
2 みかん
3 スイカ
4 メロン

テーブル【COLOR】
ID、ITEM
1 赤
2 黄
3 青
4 白

【抽出条件】関連
条件も複数選択できます。
テーブル【SEARCH】と【SEARCH_DETAIL】2つのテーブルで管理

※会員を抽出条件を管理するテーブル
テーブル【SEARCH】
ID、TITLE
1 「りんご」または「メロン」または「赤」または「白」がすきな人
2 「スイカ」または「青」がすきな人


テーブル【SEARCH_DETAIL】
SEARCH_ID、FRUIT_CD
1         1
1         4
2         3

テーブル【SEARCH_COLOR】
SEARCH_ID、COLOR_CD
1         1
1         4
2         3

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・    
【SEARCH】のID1の出力結果イメージ

MEMBER_CD、MEMBER_NAME
10         Aさん
20         Bさん

こんなSQLを作成してみました。
【SEARCH】テーブルをループで1件づつ処理しようと考えています。
他にもっと効率がいいSQLがありますか?
よろしくお願いします。

※SEARCH_IDをどこかで指定しないと...

SELECT DISTINCT MEMBER.MEMBER_CD, MEMBER_NAME
FROM
MEMBER,MEMBER_FRUIT,MEMBER_COLOR
WHERE
MEMBER.MEMBER_CD = MEMBER_FRUIT.MEMBER_CD
AND
MEMBER_FRUIT.FRUIT_CD
********************************
in (
SELECT FRUIT_CD
FROM SEARCH,SEARCH_DETAIL
WHERE SEARCH.ID = SEARCH_DETAIL.SEARCH_ID
)
**********************************
AND MEMBER_COLOR.COLOR_CD
in(
SELECT COLOR_CD
FROM SEARCH,SEARCH_COLOR
WHERE SEARCH.ID = SEARCH_COLOR.SEARCH_ID
)
***の部分をアンケートの数だけ追加すればいいと
考えていますが...
みなさんはこういう場合、どのように対応してますか?

投稿日時 - 2009-08-29 11:02:46

QNo.5245746

すぐに回答ほしいです

質問者が選んだベストアンサー

先に提示したテーブルは基本情報です
会員が選択した情報が無いのですが、どうでしょうか?

回答テーブル
会員ID アンケートID 選択枝ID

これで、回答テーブルと、会員テーブル、アンケートテーブル、アンケート選択枝テーブルをリレーションすればよいです

なお、メリットは?ということですが
新たな質問が出た時に、いちいちテーブルを作成する必要がなく
テーブルにデータを格納すればOKです

投稿日時 - 2009-08-30 22:00:13

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

アンケートの種類だけテーブルを作成するという考えが間違っていると思います
(非常に面倒くさくないですか?)
会員テーブル
ID 氏名
1 斎藤
2 佐藤
3 田中

アンケートテーブル
ID アンケート内容
1 好きなくだものは
2 好きな色は

アンケート選択枝テーブル
ID 選択名
1 リンゴ
2 みかん
3 メロン
4 白
5 赤

アンケート質問選択枝テーブル
アンケートID 選択枝ID
1 1
1 2
1 3
2 4
2 5

はい、このテーブルで考えてみて下さい

投稿日時 - 2009-08-29 21:59:13

補足

ご指導ありがとうございます。
>アンケートの種類だけテーブルを作成するという考えが間違っていると思います
そうですか...
アンケートの件数は3,4件と考えています。

SELECT A.ID,A.氏名
FROM
会員テーブル AS A,アンケート質問選択枝テーブル AS B
WHERE
B.アンケートID=1

このテーブル構成でSELECT文作成がよくわかりません。

すみません。このテーブル構成だとどのようなメリットが
あるのでしょうか?
 

投稿日時 - 2009-08-30 01:24:42

あなたにオススメの質問