
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
)

No.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列」は確かに意味がありません。
お客さんの要望みたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
VB.NETでのAccessテーブルリンク
-
[C#] DataGridViewでコンボボッ...
-
ワークテーブルの作成について
-
手動または分散トランザクショ...
-
VB.NET データセットとADOレコ...
-
エクセルのテーブルを解除する...
-
DBFlute でシーケンス値取得
-
ヘッダ(*.h)に定義したテーブル...
-
Access2003VBA リンクテーブル...
-
ACCESS2010 実行時エラー 2766
-
ACCESSでクエリの中身が表示さ...
-
複数のデータベースを検索したい
-
ASP.NET GridView 一致した行の...
-
VBでルックアップテーブルを作...
-
VBA 変数名に変数を使用したい。
-
Redim とEraseの違いは?
-
VB.NETにて、構造体へデータを...
-
VB6.0の「vbFromUnicode」はVB....
-
MDBをADO接続でINSERT・UPDATE...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
『列名 '担当者CD' があいま...
-
SQLを発行とは?クエリの作成と...
-
VBとアクセスでSQL文に変...
-
手動または分散トランザクショ...
-
COBOLのINVALID KEYが理解でき...
-
[C#] DataGridViewでコンボボッ...
-
AccessからExcelへエクスポート...
-
ACCESS2010 実行時エラー 2766
-
エクセルのテーブルを解除する...
-
★クリスタルレポートの元になる...
-
CSVファイルのエクスポートでソ...
-
ExcelVBAからAccessMDB内のテー...
-
VB.NETでのAccessテーブルリンク
-
他のMDBのテーブルに追加したい
-
Access2007でアプリケーション...
-
アクセステーブル、リンクとロ...
-
html javascriptにてWeb SQLを...
-
DataGridViewに複数テーブルの...
-
Accessのフォームでリス...
-
更新時の「同時実行エラー」の対策
おすすめ情報