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
)

A 回答 (1件)

データベースが何か分からないので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列の存在意義がわかりません。

この回答への補足

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

DBは、MYSQLのver5です。

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

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

補足日時:2009/08/23 01:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ