みんなの「教えて(疑問・質問)」にみんなで「答える」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



テーブル【FRUIT】
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】のID1の出力結果イメージ

MEMBER_CD、MEMBER_NAME
10         Aさん
20         Bさん

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

SELECT DISTINCT MEMBER.MEMBER_CD, MEMBER_NAME
FROM
MEMBER,MEMBER_FRUIT
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
)

投稿日時 - 2009-08-22 14:06:45

QNo.5227625

すぐに回答ほしいです

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

データベースが何か分からないのでAccessで。

SELECT DISTINCT M.MEMBER_CD, M.MEMBER_NAME
FROM SEARCH_DETAIL AS SD
LEFT JOIN (MEMBER_FRUIT AS MF
LEFT JOIN MEMBER AS M
ON MF.MEMBER_CD = M.MEMBER_CD)
ON SD.FRUIT_CD = MF.FRUIT_CD
WHERE SD.SEARCH_ID=1;

SEARCHテーブルを結合する必要はなし。
あと蛇足ですが、MEMBERテーブルのID列の存在意義がわかりません。

投稿日時 - 2009-08-23 00:19:01

補足

kztkさん、ありがとうございます。

DBは、MYSQLのver5です。

SEARCHテーブルは結合する必要ないんですね!
勉強になりました。

「MEMBERテーブルのID列」は確かに意味がありません。
お客さんの要望みたいです。

投稿日時 - 2009-08-23 01:56:48

ANo.1

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

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

回答(1)

あなたにオススメの質問